Перенаправление связанных продуктов на сгруппированный продукт
-
12-12-2019 - |
Вопрос
Я расширял свой каталог и наткнулся на нескольких поставщиков, предлагающих точно такую же продукцию.Единственная разница – это цена и уровень запасов.
Чтобы избежать дублирования продуктов на моем веб-сайте (и штрафов поисковых систем), я создал 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;
}
}
Очистите кеш и попробуйте.