2

我正在使用适用于特定类别下所有产品的设计更新 XML。当从这些类别中浏览到这些产品时,更新会成功应用于这些产品,但在从搜索结果中打开这些产品时不会。从搜索结果打开时,如何使设计更新影响这些产品?

4

1 回答 1

1

您需要添加一个布局句柄,您可以为这些产品中的每一个“抓取”它,并通过布局 xml 文件修改布局。

这个过程的关键在于initProductLayout方法Mage_Catalog_Helper_Product_View。此方法是根据产品模型添加自定义布局句柄的地方。您可以从控制器中获取布局更新对象并addHandle()使用字符串调用它以添加该句柄。因此,您需要重写此方法并执行以下操作:

$update = $controller->getLayout()->getUpdate();
foreach ($product->getCategoryIds() as $categoryId) {
    $update->addHandle('PRODUCT_IN_CATEGORY_' . $categoryId);
}

现在,在一个布局 xml 文件中,您可以针对<PRODUCT_IN_CATEGORY_##>您的类别 ID 的句柄,并且您在此处放置的任何布局更新都将应用于产品视图页面,无论它是如何访问的。

根据安装的具体情况,使用其他类别标识符(如名称或 URL 键)而不是数字 ID 来键入句柄可能更有意义。为此,使用$product->getCategoryCollection()并遍历集合以获取您需要的内容。$product->getAvailableinCategories()如果您只想包含产品直接属于的类别 ID(而不是包含更高父级的类别),您可能还想使用。

于 2013-01-03T23:59:02.050 回答