我想根据logedin用户通过前端路由器控制器从产品视图页面中删除product_options_wrapper块。
我知道我可以通过编程方式附加一个新块,但是我找不到删除功能。 : - (
试过了......像那样
$this->getLayout()->unsetBlock('product_options_wrapper');
$this->getLayout()->getBlock('product.info')->remove('product_options_wrapper');
但没有任何作用。
答案 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();