Magentoの拡張機能を書いていますが、特定の状況下でコントローラから404リダイレクトを開始します。 404リダイレクトが原因コントローラでコード:Magentoエクステンションがルートレイアウトノードを上書きするときにコントローラから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');
}
このコードは、URL www.mysite.com/mymodule/index/action?name=valueを介してアクセスされ、リダイレクトが値」に基づいてトリガされます'しかしながら
、私のモジュールは、ルートノードを上書きレイアウトの更新が含まれているのでため:
<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リダイレクトは、次のHTMLを含み(白)空白のページを、表示されている
<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ページを作成するためには使用できないレイアウト構造を残していると推測しています。
if文とコードだけを残して除去することにより:
$this->_forward('defaultNoRoute');
すべてが動作しますが、私はこれを行うことの長所と短所を理解していないが。
興味深いことに、上記のコードはMagento 1.6では正しく動作しますが、1.7では正しく動作しません。
右のについてのコメントをお待ちしておりますが、動作中の404リダイレクトを含む方法でも、自分のルートノードをレイアウトで使用することができます。あなたがMage_Core_Controller_Varien_Action
クラスのnorouteAction
を呼び出すことができます404ページを表示するための
おかげ
404を生成するさまざまな方法の違いについて説明できますか?これまでは$ this-> norouteAction()の3つのメソッドがあります。$ this-> _forward( 'defaultNoRoute');最後にMage :: helper( 'cms/page') - > renderPage($ this、$ pageId) – Dom
がMagento 2には2つありますか? –