繁体   English   中英

Magento产品页面重定向

[英]Magento Product Page redirection

如果要将某个产品视图页面重定向到另一个URL,我需要覆盖Magento中的哪个控制器?

我想使用以下代码进行重定向。 还有其他类似Magento的方式吗?

if($this->getProductId() == 10) {
    header("Location: /mymodule");
    die();  
}

Magento Admin在目录> URL重写管理下具有此功能。 通过以下步骤创建新产品重写:

  1. 点击右上角的添加URL重写按钮。
  2. 从“ 创建URL重写 ”中选择“自定义”。
  3. 选择适当的商店
  4. 将“ 请求路径”设置为类似于这个catalog/product/view/id/10 (假设10是您的产品ID)。
  5. 目标路径设置为您要将请求发送到的任何路由或URL。
  6. 将“ 重定向 ”设置为可能为“临时(302)”。

找到了解决方案。 可能不是最好的,但它可以起作用:

Observer.php:

class Namespace_Mymodule_Model_Observer  {
    public function redirect(){
        //request object
        $request = Mage::app()->getRequest();
        //only redirect in the frontend/catalog
        $storeId = Mage::app()->getStore()->getId();
        if(in_array($request->getModuleName(), array("catalog")) && $storeId != 0) {
            $response = Mage::app()->getResponse();
            $params = Mage::app()->getRequest()->getParams();
            //check the product id
            if($params[id] == 10) {
                return $response->setRedirect("/mymodule", 301)->sendHeaders();
            }
        }
    }
}

以及global / events部分中的config.xml:

<controller_action_predispatch> 
    <observers> 
        <namespace_mymodule_observer>
           <type>singleton</type>
           <class>namespace_mymodule/observer</class> 
           <method>redirect</method>
        </namespace_mymodule_observer> 
    </observers> 
</controller_action_predispatch>

我相信一种更好的方法是实际利用观察者事件,因为您所需的一切已包含在此处。 同样,答案也不区分产品和类别,因为in_array($request->getModuleName(), array("catalog"))对这两者都是正确的。

class Namespace_Mymodule_Model_Observer {

    public function redirect(Varien_Event_Observer $observer) {

        $actionName = $observer->getEvent()->getControllerAction()->getFullActionName();
        $productId = $observer->getEvent()->getControllerAction()->getRequest()->getParam('id');

        if($actionName == 'catalog_product_view' && $productId == 10) {

            $response = $observer->getEvent()->getControllerAction()->getResponse();
            $response->setRedirect('/mymodule', 301)->sendHeaders();

        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM