2012-04-02 95 views
0

Magento 1.6.1我正在嘗試在觀察者上獲取表單數據。我試過 $ observer-> getEvent() - > getForm();
它是空的。這裏是我的一些代碼Magento:觀察員未獲取表格

  <catalog_product_new_action> 
      <observers> 
       <namespace_module_save_product_stuff> 
        <type>singleton</type> 
        <class>Namespace_Module_Model_Observer</class> 
        <method>saveProductStuff</method> 
       </namespace_module_save_product_stuff> 
      </observers> 
     </catalog_product_new_action> 

事件觀察員觸發,但我無法獲得表單,它只是返回null。

public function saveProductStuff(Varien_Event_Observer $observer) 
    { 
     $roleId = implode('', Mage::getSingleton('admin/session')->getUser()->getRoles()); 
     $roleName = Mage::getModel('admin/roles')->load($roleId)->getRoleName(); 
     if($roleName != 'Administrators'){ 

       try 
       { 

        $form = $observer->getEvent()->getForm(); 
        var_dump($form); 
       } catch (Exception $e) 
          { 
          Mage::getSingleton('adminhtml/session')->addError($e->getMessage()); 
          } 

     } 
    } 

我真的需要得到觀察者這種形式,但什麼也沒有發生並且Ive花費在看教程,但所有的人給你做事情的這種方法。

事件發生,我可以做它裏面的東西,但沒有得到形式。

我需要獲取表單,然後設置一個元素爲禁用,如果它的某種類型的用戶,我不能將其設置爲鎖定,因爲那麼該屬性將不會保存。我想嘗試這樣的事情:

$form = $observer->getEvent()->getForm();//returns NULL 
$element = $form->getElement('attribute_code'); 
$value = 'test'; 

$element->setValue($test); 
$element->setDisabled(true); 

但沒有運氣。我真的很感激任何幫助。

回答

2

不幸的是,有了這個事件,沒有辦法獲得表格。下面是它是如何調用(應用程序/代碼/核心/法師/ Adminhtml /控制器/ ProductController.php:192):

Mage::dispatchEvent('catalog_product_new_action', array('product' => $product)); 

取決於你正在嘗試做的,你可能必須替換某些文件。請不要修改核心文件!事實是,如果你正在節省一些東西,那就不是禁用控制的時候了。你會想在頁面加載時做到這一點。

+0

感謝您對事件的提示,不知道。我現在會回答我自己的問題。 – changeling 2012-04-03 11:55:12

1

我決定鎖定屬性

$product->lockAttribute('attribute_code'); 

上的新動作。然後添加第二個觀察者以準備保存,解鎖並保存屬性。

$product = $observer->getEvent()->getProduct(); 
$product->unlockAttribute('attribute_code'); 

這沒有把戲。