将类别添加到产品 prestashop

Adding categories to product prestashop

所以我已经处理这个问题很长一段时间了,找不到明确的解决方案。所以基本上我使用 Product 对象将新产品直接添加到数据库中。目前一切顺利,但我无法 link 个类别的新产品。

$cat_ids = [];
    foreach ($value['kat_naziv'] as $cat_val) {
    $cat_ids[] = (int)$luceed->selectCategoryIds($cat_val)[$cat_val]['id_category'];
}

$product->id_category = 3;
$product->id_category_default = 3;

$product->save();

$product->addToCategories($cat_ids);

所以基本上 $cat_ids 是一个整数数组,我从 db 得到的,其中 name 是我作为参数传递给 selectCategoryIds 的东西;

这里有什么问题,为什么它不会将新创建的产品与我给它的类别相关联

创建新产品后(即 $product = new Product() )。您可以使用将类别分配给产品。

$product->updateCategories($category_array); 

其中

$category_array = array("0" => "2", "1" => "3", "4" => "6"...... );

@FMEModule 这正是我在那里所做的,但我已经用数据库中的类别 ID 填充了数组

无论如何,我最终编写了自己的查询以将产品与类别相关联

版本 (1.6)

我在 Product.php 中发现了以下错误,在 addToCategories 中搜索 if (!in_array($new_id_categ, $current_categories))(第 964 行),

注意 if 不见了 {} - 添加它们,问题就解决了:

    foreach ($categories as $new_id_categ) {

        if (!in_array($new_id_categ, $current_categories)) {

            if ($position == null) {
                $position = (int)$new_categ_pos[$new_id_categ];
            }
            $product_cats[] = array(
                'id_category' => (int)$new_id_categ,
                'id_product' => (int)$this->id,
                'position' => $position,
            );
        }

    }

Prestashop 开发人员喜欢在 ifforeach 之后省略 {} - 这非常烦人且容易出错。

此问题已在存储库中修复: https://github.com/PrestaShop/PrestaShop/blob/1.6.1.x/classes/Product.php

注意:此解决方案解决了以下场景中的错误 - a product that is already link to a category is link to another category (while keeping the original category) 虽然我不确定这是否是问题中的情况。