编程方式从布局中删除块(Programmatically remove block from lay

2019-07-18 02:29发布

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

我知道,我可以以编程方式追加新的块,但我没有找到一个删除功能。 :-(

试着做某事。 像那样

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

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

但没有任何工程。

Answer 1:

操作码应该工作,如果使用正确的块名,这是product.info.options.wrapper,而不是块别名。

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


Answer 2:

序使用,以除去一个块其父块使用下面的代码

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


Answer 3:

这应该工作:

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

为什么? 具有在文件看看Mage_Core_Model_Layout在方法generateXml()的XML被解析,并且其中一个删除被设置为一个块时,属性忽略被添加到块。 在该方法中generateBlocks()不添加所有具有该属性的块。



文章来源: Programmatically remove block from layout