Продукт Multi Store включен только для (магазин 1) Показ под (Store 2) Форма обзора

magento.stackexchange https://magento.stackexchange.com/questions/16342

Вопрос

Я не уверен, что это ошибка или что -то в этом роде с моей конфигурацией.

У меня есть одна база данных на одной установке 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 .. Проверьте включение продукта на обоих веб -сайтеenter image description hereЗдесь, на этом экране, см. В столбце Столбного Сторона только Diamond Store, так что продукт смотрите только в Diamond Store. В другом магазине не может увидеть этот продукт

Если вы обнаружите, что мульти -сайты в одном продукте удалите его. GOTO Редактировать продукт -> Вкладка веб -сайта -> Удалить нажмите, чтобы отключить в другом магазине. (Выберите только хранить, где вы хотите отобразить).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top