2013-12-22 13 views
6

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ページを表示するための

おかげ

答えて

19

$this->norouteAction(); 
return; 

404ページはバックエンドで編集できます。ページのタイトルは404 Not Found 1です。 カスタムレイアウト更新XMLをそこに配置することもできます。

+0

404を生成するさまざまな方法の違いについて説明できますか?これまでは$ this-> norouteAction()の3つのメソッドがあります。$ this-> _forward( 'defaultNoRoute');最後にMage :: helper( 'cms/page') - > renderPage($ this、$ pageId) – Dom

+0

がMagento 2には2つありますか? –

関連する問題