3

Magentoでイベントディスパッチを使用すると問題が発生します。

controller_action_predispatchを使用して、URLのパラメーターからフロントエンドセッション変数を設定しています。

さて、問題は、ユーザーが最初にサイトにアクセスしたときに、ベースURL(example.comからwww.example.comなど)にリダイレクトするページを貸し出す可能性があるようです。しかし、何らかの理由で、リダイレクト後、セッション変数が失われます...

何か案は?

ありがとうございました。

編集:

使用するコードを追加する:

public function grabRef($observer) {
    $ref = Mage::app()->getRequest()->getParam('ref', $default);
    if (isset($ref) && !is_null($ref) and !empty($ref)) {

        Mage::getSingleton('core/session',array('name'=>'frontend'))->setRefid($ref);

    }
}
4

1 に答える 1

6

このリダイレクトの前にディスパッチされるリモートで役立つイベントは2つだけですが、これらはリダイレクトに固有のものではありません。

  • controller_front_init_before
  • controller_front_init_routers

リダイレクトは、 [システム]>[構成]>[Web]> [URLオプション]の[ベースURLへの自動リダイレクト]設定に依存します。これは、によって評価されMage_Core_Controller_Varien_Front->_checkBaseUrl()ます。このリダイレクトは、ディスパッチが行われる前に発生し、GETまたはPOSTデータを追加しないため、キャプチャしようとしているパラメータが失われます。

通常、セッションは、使用されているコントローラークラスに基づいて、adminhtmlまたはセッション名前空間で初期化されます(アクションコントローラースーパークラスメソッドを参照してください。オブザーバー構成を下に移動できるはずです。フロントエンドイベント構成として、イベント領域でこれを行う必要があることに注意してくださいこのイベントがディスパッチされるまでパーツはロードされません。その特定のシナリオでは、1時間かかります。frontendMage_Core_Controller_Varien_Action->preDispatch()global/events/controller_front_init_beforeglobal

于 2012-07-03T21:07:26.063 に答える