我已经为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');
}
Run Code Online (Sandbox Code Playgroud)
可通过URL 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>
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
我猜测通过更新根节点,我留下了一个布局结构,重定向代码不能用来创建完整的404页面.
通过删除if语句并只留下代码:
$this->_forward('defaultNoRoute');
Run Code Online (Sandbox Code Playgroud)
一切正常,但我不明白这样做的利弊.
有趣的是,上面的代码在Magento 1.6上正常工作,但在1.7上没有.
我很欣赏任何关于包含工作404重定向的正确方法的评论,但仍然允许我在布局中使用我自己的根节点.
谢谢
smi*_*gle 22
对于显示404页面,您可以调用norouteAction的的Mage_Core_Controller_Varien_Action类.
$this->norouteAction();
return;
Run Code Online (Sandbox Code Playgroud)
可以在后端编辑404页面.该页面有标题404 Not Found 1.您还可以在其中添加自定义布局更新XML.
| 归档时间: |
|
| 查看次数: |
12564 次 |
| 最近记录: |