我想在导航栏上添加一个可以直接链接到特定产品的静态链接。
由于我在"枕头"类别下只有一个产品列表,我希望将其设置为直接进入产品,跳过目录视图。
我知道有两种方法,即URL重写管理和静态块,但是我都遇到了问题。
对于"URL 重写",它有效,但是一旦我在类别中更新了某些内容(例如移动位置),系统会生成一个新的"URL 重写"并删除我的自定义内容。
对于"静态块",我不知道该放入什么代码。我的猜测是添加下面的代码,但它不起作用。
{{block type="catalog/product_view" product_id="896" template="catalog/category/view.phtml"}}
我该如何完成它?提前谢谢。
我对这个问题采取了不同的方法,这可能会有所帮助。如果一个类别只包含一个产品,您的最终目标似乎是跳过类别视图。因此,与其对硬编码模板大惊小怪或试图通过 URL 重写来破坏类别,不如使用事件观察器来完成此操作。
该方法将侦听要触发的<catalog_controller_category_init_after>
事件,并检查该类别是否只有一个产品。如果是这样,它将直接将请求发送到产品。您将需要添加新扩展或修改现有扩展。
等等/配置.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>
模型/观察者.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;
}
}