2

カスタムhtmlブロックを特定のURLにリダイレクトしたいのですが。

私が試していること:

class Mage_Page_Block_Html_World extends Mage_Core_Block_Template {
function __construct()
{
    $i = 0;
    parent::__construct();
    $this->setTemplate('page/html/world.phtml');
    $this->setCookie();
}

public function setCookie()
{
    $lang = $this->getLanguageCode();
    if(isset($_GET['country'])) {
        $country = $_GET['country']; 
        Mage::getModel('core/cookie')->set('country', $country);
    } else {
        $country = Mage::getModel('core/cookie')->get('country');
    }
    /*Redirect to cookie url*/
    if($country) {
        try {
            $url = "http://myurl.dev/".$country."/";
            Mage::app()->getFrontController()->getResponse()->setRedirect($url);
        } catch (Exception $e) {
            echo 'Exception: ',  $e->getMessage(), "\n";
        }
    }
}

.htaccessでマルチストア構成を使用しているため、次を使用します。

SetEnvIfホストwww.myurl.devMAGE_RUN_CODE= base
SetEnvIf Host www.myurl.dev MAGE_RUN_TYPE = website
SetEnvIf Host ^ myurl.dev MAGE_RUN_CODE = base
SetEnvIf Host ^ myurl.dev MAGE_RUN_TYPE = website

SetEnvIfホストwww.myurl1.devMAGE_RUN_CODE=
vsSetEnvIfホストwww.myurl1.devMAGE_RUN_TYPE=ウェブサイト
SetEnvIfホスト^myurl1.devMAGE_RUN_CODE =
vsSetEnvIfホスト^myurl1.devMAGE_RUN_TYPE =website

問題:このリダイレクトを使用すると、エラー310:リダイレクトが多すぎます。これを修正する方法がわかりません。

4

2 に答える 2

4

フレームワークアーキテクチャを考えると、これは不適切なアプローチです。開発者がコードを解析してリダイレクトをトリガーするために利用できるメカニズムはいくつかあります。現在のアプローチでは、リクエストコントローラーレイヤーとイベントオブザーバーシステムの方がはるかに適切な場合に、ビューレイヤーを使用してリダイレクトをトリガーします。

このcontroller_action_predispatchイベントは、すべてのリクエストスコープで利用できるイベントであり、すべてのルートを対象としたディスパッチ前のイベントがあります。これらとMage_Core_Controller_Request_Httpオブジェクト(「リクエストオブジェクト」)を使用して、リダイレクトをトリガーできます。

于 2012-07-16T14:34:26.500 に答える
1

リダイレクトが多すぎると、無限ループが発生します。このブロックをすべてのページに読み込んでいるようです。つまり、ユーザーがリダイレクトされた後でも、ブロックが再度読み込まれ、リダイレクトを試みます。

国のチェックを変更する必要があることをお勧めします。

if($country) {

ユーザーがリダイレクトされたら、このチェックは失敗する必要があります。これは、別のリダイレクトが送信されないようにするためです。現在、リダイレクト後もtrueを返しているように見えます。

于 2012-07-16T11:02:10.090 に答える