我正在使用prestashop 1.5.6并通过第三方库(我写的)将批量类别和产品操作制作成mysql。一切都很好,直到我的一些产品显示错误的类别。
例如,我有一个A类产品;
但是,当我去B类时,A产品也在那里。
我认为我的ps_category_product
表位置列有问题。
我正在使用下面的代码更新此表;
$sqlFirst = 'SELECT id_product, id_category_default, xml_id_product FROM ps_shop_product';
$queryFirst = $db->prepare($sqlFirst);
$queryFirst->execute();
while ($rowFirst = $queryFirst->fetch(PDO::FETCH_OBJ)){
$sqlProductAddCatPosFirst = '
INSERT INTO ps_shop_category_product
(id_product, id_category, position)
VALUES
(?, ?, ?)
';
// ps_shop_category_product Sql sorgumuzu hazırlayalım
$queryProductAddCatPosFirst = $db->prepare($sqlProductAddCatPosFirst);
$queryProductAddCatPosFirst->bindParam(1, $rowFirst->id_product, PDO::PARAM_INT);
$queryProductAddCatPosFirst->bindParam(2, $rowFirst->id_category_default, PDO::PARAM_INT);
$queryProductAddCatPosFirst->bindParam(3, $rowFirst->id_product, PDO::PARAM_INT);
// ps_shop_category_product Hazır Sql sorgumuzu çalıştıralım
$queryProductAddCatPosFirst->execute();
}
但Backoffice > Products > Filter By Category
标签上的所有内容都很好。
它显示了类别下的正确产品。前台是否有任何具体细节?如果我截断表(ps_category_product)
,我的产品不会显示在Front Office的类别中。我错过了什么?
任何帮助都会大大增加。
更新
在@bcsteeve评论之后,我从BackOffice创建了一个样本类别,所有产品都以正确的类别显示。当我看到我的mysql表上的变化;只有ps_category
表更改了一些值nleft
和nright
列。
在我的简单网络服务中,我将nleft
和nright
分配给0(零)。但现在他们有一些不同于0(零)的值。
现在我认为我的问题是重新计算ps_category
表的层次结构。
是否有任何特定的prestashop核心控制器和/或方法 可以重新计算
ps_category
表上的nleft和nright值吗? 因为我不希望在我的webservice之后手动添加类别 更新我的产品和类别。
提前致谢!
答案 0 :(得分:0)
您可以使用以下代码重新生成nleft
表的nright
和ps_category
列:
require_once '../config/config.inc.php';
try {
Category::regenerateEntireNtree();
} catch (CategoryException $e) {
echo $e->getMessage();
}
答案 1 :(得分:0)
我在prestashop 1.6中遇到了同样的问题。 如果选择了文件缓存,请关闭缓存。 几分钟后缓存开启,所有缓存再次恢复工作。
答案 2 :(得分:0)
我有一个类似的问题,类别页面中的产品列表是错误的,我升级了分层导航模块,它已经解决了问题,我想我应该为这个模块创建一些索引crons