【问题标题】:Magento: Observer not getting formMagento:观察者没有得到表格
【发布时间】:2012-04-02 21:51:31
【问题描述】:

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

但没有运气。非常感谢任何帮助。

【问题讨论】:

    标签: magento


    【解决方案1】:

    很遗憾,对于此事件,无法获取表单。这是它的名称(app/code/core/Mage/Adminhtml/controllers/ProductController.php:192):

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

    根据您要执行的操作,您可能需要覆盖某些文件。请不要修改核心文件!现实情况是,如果您要保存某些内容,则不是禁用控件的时候。当页面加载时你会想要这样做。

    【讨论】:

    • 感谢有关事件的提示,不知道。我现在将回答我自己的问题。
    【解决方案2】:

    我决定锁定属性

    $product->lockAttribute('attribute_code');  
    

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

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

    这成功了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多