特定のカテゴリのすべての製品に適用されるデザイン更新XMLを使用しています。これらのカテゴリから製品を参照すると、更新は正常に適用されますが、検索結果からそれらの製品を開いた場合は適用されません。検索結果から開いたときに、デザインの更新がそれらの製品に影響を与えるようにするにはどうすればよいですか?
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 のハンドルをターゲットにすることができます。ここに配置したレイアウトの更新は、アクセス方法に関係なく、製品ビュー ページに適用されます。
インストールの詳細によっては、数値 ID の代わりに、名前や URL キーなどの他のカテゴリ識別子を使用してハンドルをキー設定する方が適切な場合があります。このために$product->getCategoryCollection()
、コレクションを使用して反復処理し、必要なものを取得します。$product->getAvailableinCategories()
商品が直接属するカテゴリ ID のみを含めたい場合にも使用できます (より上位の親子関係のカテゴリを含めるのではなく)。