Magento:直接将静态页面导航到特定产品
Magento: Navigation static page directly to specific product
我想在导航栏中添加一个静态 link,可以 link 直接指向特定产品。
由于类别 "pillow" 下只有一个产品列表,我希望将其设置为直接进入产品,跳过目录视图。
我知道有两种方法,URL 重写管理 和静态块,但是我都遇到了问题.
对于 "URL rewrite",它起作用了,但是一旦我在类别中更新了一些东西(例如移动位置),系统就会生成一个新的 "URL rewrite" 并删除我的自定义的。
对于"static block",我不知道在里面放什么代码。我的猜测是添加以下代码,但它不起作用。
{{block type="catalog/product_view" product_id="896" template="catalog/category/view.phtml"}}
如何完成?提前致谢。
我对这个问题采取了不同的方法,这可能会有帮助。如果类别仅包含一种产品,您的最终目标似乎是跳过类别视图。因此,与其大惊小怪地使用硬编码模板或尝试通过 URL 重写来破坏类别,您可以使用事件观察器来完成此操作。
该方法将侦听 <catalog_controller_category_init_after>
事件触发并检查该类别是否只有一种产品。如果是这样,它会将请求直接发送到产品。您将需要添加新的扩展程序或修改现有的扩展程序。
etc/config.xml
在config/frontend/events
下创建一个新节点:
<catalog_controller_category_init_after>
<observers>
<redirectSingleProduct>
<class>My_MyExtension_Model_Observer</class>
<method>redirectSingleProduct</method>
</redirectSingleProduct>
</observers>
</catalog_controller_category_init_after>
Model/Observer.php
创建相应的方法来处理事件:
class My_MyExtension_Model_Observer
{
/**
* Check whether a category view only contains one product, if so send the request directly to it.
* @param Varien_Event_Observer $observer
* @return $this
*/
public function redirectSingleProduct(Varien_Event_Observer $observer)
{
$category = $observer->getCategory();
if ($category->getProductCount() == 1) {
$product = $category->getProductCollection()->addUrlRewrite()->getFirstItem();
$url = $product->getProductUrl();
$observer->getControllerAction()->getResponse()->setRedirect($url);
}
return $this;
}
}
我想在导航栏中添加一个静态 link,可以 link 直接指向特定产品。
由于类别 "pillow" 下只有一个产品列表,我希望将其设置为直接进入产品,跳过目录视图。
我知道有两种方法,URL 重写管理 和静态块,但是我都遇到了问题.
对于 "URL rewrite",它起作用了,但是一旦我在类别中更新了一些东西(例如移动位置),系统就会生成一个新的 "URL rewrite" 并删除我的自定义的。
对于"static block",我不知道在里面放什么代码。我的猜测是添加以下代码,但它不起作用。
{{block type="catalog/product_view" product_id="896" template="catalog/category/view.phtml"}}
如何完成?提前致谢。
我对这个问题采取了不同的方法,这可能会有帮助。如果类别仅包含一种产品,您的最终目标似乎是跳过类别视图。因此,与其大惊小怪地使用硬编码模板或尝试通过 URL 重写来破坏类别,您可以使用事件观察器来完成此操作。
该方法将侦听 <catalog_controller_category_init_after>
事件触发并检查该类别是否只有一种产品。如果是这样,它会将请求直接发送到产品。您将需要添加新的扩展程序或修改现有的扩展程序。
etc/config.xml
在config/frontend/events
下创建一个新节点:
<catalog_controller_category_init_after>
<observers>
<redirectSingleProduct>
<class>My_MyExtension_Model_Observer</class>
<method>redirectSingleProduct</method>
</redirectSingleProduct>
</observers>
</catalog_controller_category_init_after>
Model/Observer.php
创建相应的方法来处理事件:
class My_MyExtension_Model_Observer
{
/**
* Check whether a category view only contains one product, if so send the request directly to it.
* @param Varien_Event_Observer $observer
* @return $this
*/
public function redirectSingleProduct(Varien_Event_Observer $observer)
{
$category = $observer->getCategory();
if ($category->getProductCount() == 1) {
$product = $category->getProductCollection()->addUrlRewrite()->getFirstItem();
$url = $product->getProductUrl();
$observer->getControllerAction()->getResponse()->setRedirect($url);
}
return $this;
}
}