Programmatically remove block from layout

后端 未结 3 720
逝去的感伤
逝去的感伤 2021-01-15 13:55

I want to remove the product_options_wrapper block from the product view page according to the logedin user via frontend router controller.

I know that I can program

相关标签:
3条回答
  • 2021-01-15 14:28

    Inorder to remove a block using its parent block use the code below

    $this->getLayout()->getBlock('product.info')->unsetChild('product_options_wrapper');
    
    0 讨论(0)
  • 2021-01-15 14:33

    This should work:

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

    Why? Have a look in the file Mage_Core_Model_Layout in the method generateXml() the XML is parsed and where a remove is set for a block, the attribute ignore is added to the block. In the method generateBlocks() all the blocks which have that attribute are not added.

    0 讨论(0)
  • 2021-01-15 14:47

    The OP code should work, if it used the correct block name, which is product.info.options.wrapper, as opposed to the block alias.

    $this->loadLayout();
    //e.g. 
    if (Mage::getSingleton('customer/session')->getCustomerGroupId() == [id]){
         $this->getLayout()->unsetBlock('product.info.options.wrapper');
    }
    $this->renderLayout();
    
    0 讨论(0)
提交回复
热议问题