Magento观察员取消了阻止

时间:2015-04-13 12:34:22

标签: php xml magento

我有一个观察者:

public function removePrice($observer) {
    // $observer contains data passed from when the event was triggered.
    // You can use this data to manipulate the order data before it's saved.
    // Uncomment the line below to log what is contained here:
    $layout = $observer->getEvent()->getLayout();
    if ($block = $layout->getBlock('catalog_product_price_template')) {
        $layout->unsetBlock('catalog_product_price_template');
    }
}

和我的观察者的config.xml:

...
<controller_action_layout_generate_blocks_after>
    <observers>
        <...>
            <type>singleton</type>
            <class>...</class>
            <method>removePrice</method>
        </...>
    </observers>
</controller_action_layout_generate_blocks_after>
....

在我的商店app\design\frontend\default\myShop\layout\catalog的catalog.xml中,定义了块:

<default>
    <block type="catalog/product_price_template" name="catalog_product_price_template" />
</default>

正确调用Observer。问题是块catalog_product_price_template仍然出现在前端。也许我在这里有错误的事件?

对任何答案都会感到高兴!:)。

1 个答案:

答案 0 :(得分:2)

您可以使用更简单的解决方案。将remove元素添加到XML中。

public function removePrice($observer) {
    $layout = $observer->getLayout();
    $layout->getUpdate()->addUpdate('<remove name="catalog_product_price_template"/>');              
    $layout->generateXml();
}

另一个问题可能是您的XML块名称不正确。尝试删除块并查看是否删除了块。如果它不是正确的块,则首先搜索块。

然后查看我们的list.phtml模板。也许您手动添加了价格。