我不确定这是错误还是我的配置。

我在一个Magento安装上有一个数据库,运行了两家商店。

某些产品仅在(商店1)中启用,而这些产品仅在(商店1)下显示。但是,通过分析,我发现了来自/评论/product/list/id/nnn页面的404页,引起了我的注意,该产品不在(商店2)中显示了产品名称,价格和图像。 (该产品确实存在并且在站点地图中,所以这就是为什么以及如何引起我注意的原因)。

当您单击“产品评论表格”页面的链接后,您将获得预期的404页面,所以我的问题是为什么以及如何完全显示这些产品?产品审查模板似乎都来自已经不允许产品出现的相同模板,所以我想知道这更多是控制代码本身显示的内容或在代码本身中的路由URL吗?

即使我输出的值 $_product = $this->getProduct(); 我获得了有关该产品的信息,并且该信息确实显示为Store2,该产品在所有帐户中都不存在。

有帮助吗?

解决方案

哦,这很奇怪,似乎确实有一个“错误”,或者只是关于产品应在评论中显示的意见的“差异”。

产品视图

因此,目前“目录产品视图”页面使用 Mage_Catalog_Helper_Product 帮助初始化和渲染产品。听起来不错,并且进行了几次良好的检查。

$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功能中看到的,但可悲的是,这就是检查的全部,因此不会进一步检查网站。现在,我不确定这实际上是一个错误还是所需的结果,但是应该简单地整理出来。

使固定

为了解决这个问题,它似乎很简单,幸运的是,有两个事件可以挂在上面。他们俩都被解雇了 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在此屏幕中,请参见网站专栏仅钻石商店显示,因此仅在钻石商店中查看产品。在其他商店看不到这个产品

如果您在单产品中找到多个站点,则将其删除。 goto编辑产品 - >网站选项卡 - >删除单击从其他商店禁用。 (仅选择要显示的位置存储)。

许可以下: CC-BY-SA归因
scroll top