有条不紊地删除Magento中的页眉/页脚

Tah*_*sin 4 php layout footer magento

我有一个可以访问的模块页面

www.example.com/module/controller/action/id/10

在控制器的动作中我想要这样的东西

$page = (int) Mage::app()->getRequest()->getParam('id');
if($page == '12')
{
    $this->getLayout()->unsetBlock('header');
    $this->getLayout()->unsetBlock('footer');
}
Run Code Online (Sandbox Code Playgroud)

但上面的方法不起作用,我想我正在向unsetBlock方法传递错误的别名.

我知道如何通过布局xml隐藏页眉/页脚,但在这里我想隐藏它们在控制器中.

所以基本上我正在寻找替代方案

<remove name="header"/>
<remove name="footer"/> 
Run Code Online (Sandbox Code Playgroud)

Tah*_*sin 6

我找到了解决我自己的问题的方法,因为它可以帮助别人.

1.为页面创建新的布局句柄

// Namespace/Modulename/Model/Observer.php
Class Namespace_Modulename_Model_Observer extends Mage_Core_Model_Abstract
{

    public function addAttributeSetHandle(Varien_Event_Observer $observer)
    {
        $page = (int) Mage::app()->getRequest()->getParam('id');
        $handle = sprintf('modulename_controller_action_id_%s', $page);
        $update = $observer->getEvent()->getLayout()->getUpdate();
        $update->addHandle($handle);
    }
}
Run Code Online (Sandbox Code Playgroud)

2.在模块的config.xml中启用观察者

// Namespace/Modulename/etc/config.xml
<frontend>
    <events>
        <controller_action_layout_load_before>
            <observers>
                <attributesethandle>
                    <class>Namespace_Modulename_Model_Observer</class>
                    <method>addAttributeSetHandle</method>
                </attributesethandle>
            </observers>
        </controller_action_layout_load_before>
    </events>
</frontend>
Run Code Online (Sandbox Code Playgroud)

3.然后modulename_controller_action_id_12在模块布局xml中轻松更改句柄的布局.

<modulename_controller_action_id_12>
    <remove name="header"/>
    <remove name="footer"/>
    <reference name="root">
        <action method="setTemplate">
            <template>page/1column.phtml</template>
        </action>
    </reference>
</modulename_controller_action_id_12>
Run Code Online (Sandbox Code Playgroud)