[英]Magento Product Page redirection
如果要将某个产品视图页面重定向到另一个URL,我需要覆盖Magento中的哪个控制器?
我想使用以下代码进行重定向。 还有其他类似Magento的方式吗?
if($this->getProductId() == 10) {
header("Location: /mymodule");
die();
}
Magento Admin在目录> URL重写管理下具有此功能。 通过以下步骤创建新产品重写:
catalog/product/view/id/10
(假设10是您的产品ID)。 找到了解决方案。 可能不是最好的,但它可以起作用:
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.