0

を使用しようとしていますaddHandle()が、次を使用するとエラーが発生します。

public function HandleMe($observer)

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

  $update->addHandle('handlename');

「致命的なエラー: メンバー関数の呼び出し」が発生しgetUpdate()ます

4

2 に答える 2

1

レイアウトを更新する前にコア/レイアウトをロードする必要があるため、以下のコードに従ってみてください。

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

または、以下のリンクを参照してください。

リンク 1

リンク 2

于 2013-10-24T11:14:28.780 に答える
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 : これは参考用です。オブザーバーとハンドルを正しく使用しているかどうかを確認できます。

于 2013-10-24T12:22:39.223 に答える