Magento:如何通过观察者添加句柄

时间:2013-10-24 10:43:47

标签: magento magento-1.7

我正在尝试使用addHandle(),但使用以下内容会产生错误:

public function HandleMe($observer)

  $update = $observer->getEvent()->getLayout()->getUpdate();

  $update->addHandle('handlename');

引发“致命错误:调用成员函数getUpdate()

2 个答案:

答案 0 :(得分:1)

您必须在更新布局之前加载核心/布局,因此请尝试按照以下代码进行操作,

 public function addCustomHandles($observer) {
       $update = Mage::getSingleton('core/layout')->getUpdate();
        //Your code here..
        }

或参考以下链接,

Link 1

Link 2

答案 1 :(得分:0)

尝试使用以下方法:

首先将它添加到yourcustommodule中的config.xml中:

<config>
<frontend>
        <events>
            <controller_action_layout_load_before>
                <observers>
                    <yourcustomtheme_observer>
                        <class>yourcustomtheme/observer</class>
                        <method>addHandles</method>
                    </yourcustomtheme_observer>
                </observers>
            </controller_action_layout_load_before>
        </events>
</frontend>
</config>

然后将以下方法添加到您的观察者

class YourPackage_YourCustomTheme_Model_Observer extends CLS_Core_Model_Abstract
{
    public function addHandles($observer) {
        $category = Mage::registry('current_category');
        if ($category instanceof Mage_Catalog_Model_Category) {
            $update = Mage::getSingleton('core/layout')->getUpdate();
            $fertilility = (count($category->getChildrenCategories()->getData())) ? 'parent' : 'nochildren';
            $update->addHandle('catalog_category_' . $fertilility);
        }
        return $this;
    }
}

PS:这仅供参考,因此您可以检查是否正确使用了观察者和句柄。