【发布时间】:2014-08-14 18:42:39
【问题描述】:
我有一个在 Prestashop 1.6 上运行的网站。我们能够安装和设置默认商店以及几个多商店。我们遇到的问题是,当我们继续为我们的位置创建多商店并将产品添加到这些商店时,我们希望这些产品显示在我们默认的“主”商店中。有没有办法做到这一点?
【问题讨论】:
我有一个在 Prestashop 1.6 上运行的网站。我们能够安装和设置默认商店以及几个多商店。我们遇到的问题是,当我们继续为我们的位置创建多商店并将产品添加到这些商店时,我们希望这些产品显示在我们默认的“主”商店中。有没有办法做到这一点?
【问题讨论】:
我确信这种定制必须在代码中完成,但这并不难。您可以构建一个模块来查询产品并将其显示在任何显示挂钩中,例如displayLeftColumnProduct 或displayHome。
第二种方法是使用覆盖。覆盖 Product 类或 ProductController 也可能有效,但在这里我将向您展示如何通过覆盖来做到这一点。
查看Product 类,在getProducts 方法(https://github.com/PrestaShop/PrestaShop/blob/1.6/classes/Product.php#L1069) 中有一个对Shop::addSqlAssociation('product', 'p') 的调用来为shop 创建JOIN。为了绕过它,我们需要重写 Shop::addSqlAssociation 方法(https://github.com/PrestaShop/PrestaShop/blob/1.6/classes/shop/Shop.php#L954)并检查当前商店是否是“Master”,例如:
class Shop extends ShopCore {
public static function addSqlAssociation($table, $alias, $inner_join = true, $on = null, $force_not_default = false)
{
// It better to check using URL
if (self::$context_id_shop == 1) return '';
return parent::addSqlAssociation($table, $alias, $inner_join, $on, $force_not_default);
}
}
【讨论】: