如果我想将某个产品视图页面重定向到另一个网址,我需要覆盖Magento中的哪个控制器?
我想使用以下代码进行重定向。还有Magento式的做法吗?
if($this->getProductId() == 10) {
header("Location: /mymodule");
die();
}
答案 0 :(得分:1)
Magento Admin在 目录>下具有此功能网址重写管理 。使用以下步骤创建新产品重写:
catalog/product/view/id/10
的内容(假设10是您产品的ID)。答案 1 :(得分:1)
找到解决方案。可能不是最好的但它有效:
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();
}
}
}
}
全局/事件部分中的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>
答案 2 :(得分:0)
我认为更好的方法是实际利用观察者事件,因为您已经将所有需要包括在内。此外,答案不区分产品和类别,因为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();
}
}
}