2012-04-02 66 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'); 

这没有把戏。