Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 有条件地删除Magento中的页眉/页脚_Php_Magento_Layout_Footer - Fatal编程技术网

Php 有条件地删除Magento中的页眉/页脚

Php 有条件地删除Magento中的页眉/页脚,php,magento,layout,footer,Php,Magento,Layout,Footer,我有一个模块页面,可以像 www.example.com/module/controller/action/id/10 我想在控制器的动作中有这样的动作 $page = (int) Mage::app()->getRequest()->getParam('id'); if($page == '12') { $this->getLayout()->unsetBlock('header'); $this->getLayout()->unsetBlo

我有一个模块页面,可以像

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');
}
但上面的方法不起作用,我想我给
unsetBlock
方法传递了错误的别名

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

所以我基本上是在寻找另一种选择

<remove name="header"/>
<remove name="footer"/> 

我找到了自己问题的解决方案,分享,因为它可能会帮助他人

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);
    }
}
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>

很好的解决方案。我考虑为
remove
指令的
ifconfig
属性添加支持,类似于
action
指令已经支持的内容。您的解决方案虽然有点复杂,但更灵活,当然也很有用。太棒了!谢谢分享。
<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>