Продукт Multi Store включен только для (магазин 1) Показ под (Store 2) Форма обзора
-
22-10-2019 - |
Вопрос
Я не уверен, что это ошибка или что -то в этом роде с моей конфигурацией.
У меня есть одна база данных на одной установке Magento, работающая в двух магазинах.
Некоторые продукты включены только в (магазин 1), и они появляются только под (магазин 1). Однако благодаря аналитике я нашел около 404 страниц, которые поступают со страниц/обзор/product/list/id/nnn, которые привлекли мое внимание, что продукты не в (Store 2) показывают название продукта, цену и изображение. (Продукт когда -то существовал и находился в карте сайта, так что именно поэтому и как он был доведен до моего сведения).
Когда вы нажимаете на ссылку обратно со страницы обзора продукта, вы получаете, как и ожидается, 404, не найденная страница, поэтому мой вопрос заключается в том, почему и как большая часть продукта вообще отображается? Все шаблоны обзора продукта, кажется, поступают из тех же шаблонов, которые уже не позволяют продукту появляться, поэтому мне интересно, это больше ли это URL -адрес маршрутизации, контролирующий то, что показывает или в самом коде?
Даже если я выведу значение для $_product = $this->getProduct();
Я получаю информацию о продукте, и информация показывает, что это Store2, в котором этот продукт не должен существует.
Решение
О, это странно, кажется, что есть «ошибка» или, может быть, просто «разница» в мнениях о том, когда продукт должен показать в обзоре.
Просмотр продукта
Таким образом, в настоящее время страница просмотра продукта каталога использует Mage_Catalog_Helper_Product
Чтобы помочь init и отобрать продукт. Звучит хорошо, и это делает пару хороших чеков.
$product = Mage::getModel('catalog/product')
->setStoreId(Mage::app()->getStore()->getId())
->load($productId);
if (!$this->canShow($product)) {
return false;
}
if (!in_array(Mage::app()->getStore()->getWebsiteId(), $product->getWebsiteIds())) {
return false;
}
Функция Canshow при более глубоком просмотре просто возвращает результаты $product->isVisibleInCatalog() && $product->isVisibleInSiteVisibility()
Продукт загружен правильно.
Теперь все это работает хорошо, хорошая работа Magento.
Список обзоров
Итак, давайте посмотрим, как это делает список обзоров.
Ну, во -первых, он не использует того же помощника, что немного странно, так как я предполагаю, что это ограничивает много дублированного кода, такого как проверка, может ли отображаться продукт, что, кажется, является проблемой, на которую мы здесь смотрим: (
Итак, мы знаем, что он не делает, чтобы проверить, что он делает.
Ну, он классифицирует продукт, как разрешено со следующей проверкой:
if (!$product->getId() || !$product->isVisibleInCatalog() || !$product->isVisibleInSiteVisibility()) {
Который мы видели ранее в функции Canshow Helper, но, к сожалению, это все, что он проверяет, и поэтому не проводит дополнительную проверку на веб -сайты. Теперь я не уверен, на самом деле это ошибка или желаемые результаты, но это должно быть просто просто разобраться.
Исправить
Чтобы исправить это, кажется, довольно просто, к счастью, есть два события, на которые можно зацепить. Они оба уволены в Mage_Review_ProductController::_initProduct
.
Mage::dispatchEvent('review_controller_product_init', array('product'=>$product));
Mage::dispatchEvent('review_controller_product_init_after', array(
'product' => $product,
'controller_action' => $this
));
Поэтому я бы посоветовал создать наблюдателя, который работает с одним из этих событий, и проверяет веб -сайты, прикрепленные к продукту, и если его не разрешается отображать на текущем веб -сайте, просто звоните. clearInstance
Другие советы
Перейдите в каталог администратора-> Управление продуктом. Теперь найдите этот продукт, который можно увидеть в магазине 2 .. Проверьте включение продукта на обоих веб -сайтеЗдесь, на этом экране, см. В столбце Столбного Сторона только Diamond Store, так что продукт смотрите только в Diamond Store. В другом магазине не может увидеть этот продукт
Если вы обнаружите, что мульти -сайты в одном продукте удалите его. GOTO Редактировать продукт -> Вкладка веб -сайта -> Удалить нажмите, чтобы отключить в другом магазине. (Выберите только хранить, где вы хотите отобразить).