関連製品をグループ化された製品にリダイレクトする
-
12-12-2019 - |
質問
私はカタログを拡張しており、まったく同じ製品を扱っているサプライヤーをいくつか見つけました。唯一の違いは価格と在庫レベルです。
私の Web サイト上の重複製品 (および検索エンジンのペナルティ) を避けるために、 Grouped Product
製品名を付けて、2 つの異なるサプライヤーからの 2 つの同一製品を追加し、「」に設定しました。Not visible individually
"
私が今直面している問題は、 Associated Products
に "Not visible individually
」ということは、リンクが切れてしまうことです。
私がやりたいのは、へのリダイレクトを自動的に作成することです。 Grouped Product
すべてのために Associated Products
リダイレクトを作成するにはどうすればよいですか Associated Products
に Grouped Product
?
解決
アイデアはこれです。製品ページを表示するときは、その製品がグループ化された製品に属しているかどうかを確認してください。その場合は、メインの製品ページにリダイレクトします。
落とし穴があります。単純な製品は、グループ化された複数の製品の一部になることができます。この場合、最も簡単なアプローチは、最初に見つかったものにリダイレクトすることです。
ここに使用できるコードをいくつか示します。
拡張機能を作成します。それを呼びましょう StackExchange_Grouped
.
app/etc/modules/StackExchange_Grouped.xml
- 宣言ファイル
<?xml version="1.0"?>
<config>
<modules>
<StackExchange_Grouped>
<codePool>local</codePool>
<active>true</active>
<depends>
<Mage_Catalog />
</depends>
</StackExchange_Grouped>
</modules>
</config>
app/code/local/StackExchange/Grouped/etc/config.xml
- 製品ビュー ページのオブザーバーを宣言するモジュール構成ファイル
<?xml version="1.0"?>
<config>
<modules>
<StackExchange_Grouped>
<version>1.0.0</version>
</StackExchange_Grouped>
</modules>
<global>
<models>
<stackexchange_grouped>
<class>StackExchange_Grouped_Model</class>
</stackexchange_grouped>
</models>
</global>
<frontend>
<events>
<controller_action_predispatch_catalog_product_view>
<observers>
<stackexchange_grouped>
<class>stackexchange_grouped/observer</class>
<method>redirectToParent</method>
</stackexchange_grouped>
</observers>
</controller_action_predispatch_catalog_product_view>
</events>
</frontend>
</config>
app/code/local/StackExchange/Grouped/Model/Observer.php
- グループ化された製品ページにリダイレクトするオブザーバー。
<?php
class StackExchange_Grouped_Model_Observer
{
public function redirectToParent($observer)
{
$id = Mage::app()->getRequest()->getParam('id');
$groupedParentIds = Mage::getResourceSingleton('catalog/product_link')
->getParentIdsByChild($id,
Mage_Catalog_Model_Product_Link::LINK_TYPE_GROUPED);
if (isset($groupedParentIds[0])) {
$mainProduct = Mage::getModel('catalog/product')
->setStoreId(Mage::app()->getStore()->getId())->load($groupedParentIds[0]);
Mage::app()->getResponse()->setRedirect($mainProduct->getProductUrl(), 301);
Mage::app()->getResponse()->sendResponse();
exit;
}
return $this;
}
}
キャッシュをクリアして試してみてください。