以编程方式从布局中删除块

时间:2013-01-11 09:41:13

标签: magento magento-1.6

我想根据logedin用户通过前端路由器控制器从产品视图页面中删除product_options_wrapper块。

我知道我可以通过编程方式附加一个新块,但是我找不到删除功能。 : - (

试过了......像那样

$this->getLayout()->unsetBlock('product_options_wrapper');

$this->getLayout()->getBlock('product.info')->remove('product_options_wrapper');

但没有任何作用。

3 个答案:

答案 0 :(得分:8)

为了使用其父块删除块,请使用下面的代码

$this->getLayout()->getBlock('product.info')->unsetChild('product_options_wrapper');

答案 1 :(得分:6)

这应该有效:

    $blockName = 'left'; // Add yours
    $update = Mage::app()->getLayout()->getUpdate();
    $removeInstruction = "<remove name=\"$blockName\"/>";
    $update->addUpdate($removeInstruction);

为什么呢?查看解析XML的方法Mage_Core_Model_Layout中的文件generateXml()以及为块设置删除的位置,将属性ignore添加到块中。在方法generateBlocks()中,不添加具有该属性的所有块。

答案 2 :(得分:5)

OP代码应该有效,如果它使用了正确的块名称,即 product.info.options.wrapper ,而不是块别名。

$this->loadLayout();
//e.g. 
if (Mage::getSingleton('customer/session')->getCustomerGroupId() == [id]){
     $this->getLayout()->unsetBlock('product.info.options.wrapper');
}
$this->renderLayout();