Magento 产品页面重定向
Magento Product Page redirection
如果我想将某个产品视图页面重定向到另一个 url,我需要覆盖 Magento 中的哪个控制器?
我想使用以下代码进行重定向。还有其他类似 Magento 的方法吗?
if($this->getProductId() == 10) {
header("Location: /mymodule");
die();
}
Magento Admin 在 Catalog > URL Rewrite Management 下有一个功能。使用以下步骤创建新产品重写:
- 单击右上角的 添加 URL 重写 按钮。
- Select“自定义”来自创建URL重写.
- 选择合适的店铺.
- 将请求路径设置成这样
catalog/product/view/id/10
(假设10是您产品的ID)。
- 将目标路径设置为您要将请求发送到的任何路由或URL。
- 将重定向设置为可能的“临时(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();
}
}
}
如果我想将某个产品视图页面重定向到另一个 url,我需要覆盖 Magento 中的哪个控制器?
我想使用以下代码进行重定向。还有其他类似 Magento 的方法吗?
if($this->getProductId() == 10) {
header("Location: /mymodule");
die();
}
Magento Admin 在 Catalog > URL Rewrite Management 下有一个功能。使用以下步骤创建新产品重写:
- 单击右上角的 添加 URL 重写 按钮。
- Select“自定义”来自创建URL重写.
- 选择合适的店铺.
- 将请求路径设置成这样
catalog/product/view/id/10
(假设10是您产品的ID)。 - 将目标路径设置为您要将请求发送到的任何路由或URL。
- 将重定向设置为可能的“临时(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();
}
}
}