Magento:观察员没有形成

时间:2012-04-02 21:51:31

标签: magento

Magento 1.6.1我试图在观察者身上获取表单数据。我试过了     $ observer-> getEvent() - > getForm();
它是空的。这是我的一些代码

            <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());
                          }

        }
    }

我真的需要在观察者身上得到这个表格,但没有发生任何事情,我一直在寻找教程,但所有这些都给你这种做事方法。

事件触发,我可以在其中做事但没有获得表格。

我需要获取表单,然后设置一个元素为禁用,如果它是某种类型的用户,我不能将其设置为锁定,因为该属性将不会保存。我想尝试这样的事情:

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

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

但没有运气。我真的很感激任何帮助。

2 个答案:

答案 0 :(得分:2)

不幸的是,有了这个事件,没有办法获得表格。以下是它的调用方式(app / code / core / Mage / Adminhtml / controllers / ProductController.php:192):

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

根据您要执行的操作,您可能必须覆盖某些文件。请不要修改核心文件!现实情况是,如果你要保存某些东西,那就不是禁用控件的时候了。您希望在页面加载时执行此操作。

答案 1 :(得分:1)

我决定锁定属性

$product->lockAttribute('attribute_code');  

关于新动作。然后添加第二个观察者来准备保存,解锁并保存属性。

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

这就是诀窍。