我想根据经由前端路由器控制器logedin用户从产品视图页删除product_options_wrapper块。
我知道,我可以以编程方式追加新的块,但我没有找到一个删除功能。 :-(
试着做某事。 像那样
$this->getLayout()->unsetBlock('product_options_wrapper');
$this->getLayout()->getBlock('product.info')->remove('product_options_wrapper');
但没有任何工程。
操作码应该工作,如果使用正确的块名,这是product.info.options.wrapper,而不是块别名。
$this->loadLayout();
//e.g.
if (Mage::getSingleton('customer/session')->getCustomerGroupId() == [id]){
$this->getLayout()->unsetBlock('product.info.options.wrapper');
}
$this->renderLayout();
序使用,以除去一个块其父块使用下面的代码
$this->getLayout()->getBlock('product.info')->unsetChild('product_options_wrapper');
这应该工作:
$blockName = 'left'; // Add yours
$update = Mage::app()->getLayout()->getUpdate();
$removeInstruction = "<remove name=\"$blockName\"/>";
$update->addUpdate($removeInstruction);
为什么? 具有在文件看看Mage_Core_Model_Layout
在方法generateXml()
的XML被解析,并且其中一个删除被设置为一个块时,属性忽略被添加到块。 在该方法中generateBlocks()
不添加所有具有该属性的块。