カスタムカテゴリのデザインは、カテゴリURLスラッグなしでは適用されませんか?
-
16-10-2019 - |
質問
私は奇妙な問題を経験しています。カテゴリAにカスタムデザインがあるとしましょう。私が介して製品を開くとき domain.com/category-a/product.html
カスタムデザインは正しく適用されます。
しかし、MagentoのCanonical/GoogleサイトマップURLを介して製品を開くと domain.com/product.html
カスタムデザインは適用されません。
どうすればその動作をバイパスできますか?それは、Magentoが製品として適用するカテゴリのカスタムデザインが複数のカテゴリを持つことができるかわからないからだと思いますか?
レイアウト構造は次のとおりです。
- カスタムデザイン
- - >デフォルト
- - > category_custom
解決
製品ページはからレンダリングされます Mage_Catalog_Helper_Product_View::prepareAndRender()
. 。この方法は、呼び出すことにより現在のカテゴリを考慮します Mage_Catalog_Helper_Product_View::initProduct()
このコードで:
$categoryId = $params->getCategoryId();
//...
if ($categoryId) {
$category = Mage::getModel('catalog/category')->load($categoryId);
$product->setCategory($category);
Mage::register('current_category', $category);
}
したがって、フローは次のようなものです:
- オプションで製品を開始する(カテゴリIDを含む)
- initの結果に基づいて製品をレンダリングします。
INITフェーズにロジックを追加して、カテゴリを指定することを試みることができます。
最後に initProduct
方法、このイベントが発送されます。
Mage::dispatchEvent('catalog_controller_product_init', array('product' => $product));
これに関するオブザーバーを作成して、製品カテゴリ(上記のコードに似たもの)を設定することができ、レンダリング部分はカテゴリを考慮に入れる必要があります。
所属していません magento.stackexchange