2014-10-13 2 views
0

Я пытаюсь обновить счетчик популярности модуля Tag Magento путем взаимодействия с этой основной функцией в Mage_Tag_Model_APIКак изменить существующую информацию тега в Magento

public function update($tagId, $data, $store) 
{ 
    $data = $this->_prepareDataForUpdate($data); 
    $storeId = $this->_getStoreId($store); 
    /** @var $tag Mage_Tag_Model_Tag */ 
    $tag = Mage::getModel('tag/tag')->setStoreId($storeId)->setAddBasePopularity()->load($tagId); 
    if (!$tag->getId()) { 
     $this->_fault('tag_not_exists'); 
    } 

    // store should be set for 'base_popularity' to be saved in Mage_Tag_Model_Resource_Tag::_afterSave() 
    $tag->setStore($storeId); 
    if (isset($data['base_popularity'])) { 
     $tag->setBasePopularity($data['base_popularity']); 
    } 
    if (isset($data['name'])) { 
     $tag->setName(trim($data['name'])); 
    } 
    if (isset($data['status'])) { 
     // validate tag status 
     if (!in_array($data['status'], array(
      $tag->getApprovedStatus(), $tag->getPendingStatus(), $tag->getDisabledStatus()))) { 
      $this->_fault('invalid_data'); 
     } 
     $tag->setStatus($data['status']); 
    } 

    try { 
     $tag->save(); 
    } catch (Mage_Core_Exception $e) { 
     $this->_fault('save_error', $e->getMessage()); 
    } 

    return true; 
} 

В моем контроллере у меня есть это:

public function clickAction() 
{ 
    $tagString = $this->getRequest()->getParam('tag'); 
    $tagByName = Mage::getModel('tag/tag')->loadByName($tagString); 
    $tagId = $tagByName->getTagId(); 
    $basePopularity = ['base_popularity' => '13']; // hard coding while testing 
    Mage::getModel('tag/api')->update($tagId, $basePopularity, 1); 
} 

Если я кладу заявление войти эту часть функции обновления:

try { 
     // log stuff 
     $tag->save(); 
    } 

Я вижу, что это делает это до try, но никаких изменений в данных. Что я испортил? Любые другие идеи о том, как я могу обновить популярность тега через контроллер? Используя этот же метод и добавление 'name' => 'blah' этому параметру $data массива отлично работает ..

Я также нашел в Mage_Tag_Model_Indexer_Summary.php этот метод определен в PHPDoc * @method Mage_Tag_Model_Indexer_Summary setPopularity(int $value) Может быть, это то, что мне нужно ... может кто-то привести пример, показывающий, как я мог использовать этот волшебный сеттер?

ответ

1

Попробуйте добавить Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID); в начало вашего вида clickAction. base_popularity может быть обновлен только из магазина admin.

+0

Да! Вот и все, спасибо! – Zac