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

在此重定向之前仅调度了两个远程有用的事件,但它们并不特定于重定向:

  • controller_front_init_before
  • controller_front_init_routers

重定向取决于System > Configuration > Web > Url Options中的“自动重定向到基本 URL”设置,该设置由Mage_Core_Controller_Varien_Front->_checkBaseUrl(). 此重定向发生在任何调度发生之前,并且它不会附加 GET 或 POST 数据,因此会丢失您尝试捕获的参数。

通常会话在adminhtmlfrontend基于正在使用的控制器类的会话命名空间下初始化(参考动作控制器超类方法Mage_Core_Controller_Varien_Action->preDispatch()。您应该能够将观察者配置移动到下global/events/controller_front_init_before请注意,您必须在global事件区域中执行此操作,作为前端事件配置部分直到此事件被调度后才会加载。那个特定的场景花了我一个小时一次!

于 2012-07-03T21:07:26.063 回答