Magento如何在扩展覆盖根布局节点时从控制器触发404重定向

时间:2013-12-22 12:59:44

标签: magento layout

我已经为Magento编写了一个扩展程序,它将在某些情况下从控制器启动404重定向。控制器中导致404重定向的代码是:

$this->getResponse()->setHeader('HTTP/1.1','404 Not Found');
$this->getResponse()->setHeader('Status','404 File not found');
$pageId = Mage::getStoreConfig('web/default/cms_no_route');
if (!Mage::helper('cms/page')->renderPage($this, $pageId)) {
    $this->_forward('defaultNoRoute');
}

可通过网址www.mysite.com/mymodule/index/action?name=value访问此代码,并根据“值”触发重定向。

但是,因为我的模块包含覆盖根节点的布局更新:

<layout version="0.1.0">
    <mynamespace_mymodule_index_action>
        <block type="mymodule/list" name="root" template="mynamespace/mymodule/list.phtml" output="toHtml" />
    </mynamespace_mymodule_index_action>
</layout>

404重定向显示空白(白色)页面,其中包含以下HTML:

<head>
</head>
<body>
    <div id="outerdivshade">    
        <div id="outerdivpadding">
            <div class="wrapper">
                <div class="page">
                    <div class="main-container col2-left-layout">
                        <div class="main">
                            <div class="col-main"></div>
                            <div class="col-left sidebar"></div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</body>

我猜测通过更新根节点,我留下了一个布局结构,重定向代码无法使用它来创建完整的404页面。

删除if语句并只留下代码:

$this->_forward('defaultNoRoute');

一切正常,但我不明白这样做的利弊。

有趣的是,上面的代码在Magento 1.6上正常工作,但在1.7上没有。

我很感激正确包含工作404重定向的方式的任何评论,但仍然允许我在布局中使用我自己的根节点。

由于

1 个答案:

答案 0 :(得分:22)

要显示404页面,您可以拨打norouteAction课程的Mage_Core_Controller_Varien_Action

$this->norouteAction();
return;

可以在后端编辑404页面。该网页标题为404 Not Found 1。 您还可以在其中添加自定义布局更新XML。