PHP - Prestashop将多个图像添加到单个产品中

时间:2016-06-21 08:18:14

标签: php prestashop

我制作了一个模块,如果它不存在,它会自动将产品添加到Prestashop。

我在这个问题上遵循了this主题,并在添加带有一个图像的产品时设法使其成功。但问题是当我遇到带有多个图像的产品时。

我试图将它包装在foreach循环中,以便它为每个图像重复该过程:

foreach ($image_arr as $image_val) {
    $image = new Image();
    $image->id_product = $product->id;
    $image->position = Image::getHighestPosition($product->id) + 1;
    $image->cover = true; // or false;
    if (($image->validateFields(false, true)) === true &&
        ($image->validateFieldsLang(false, true)) === true && $image->add())
    {
        $image->associateTo($product->id_shop_default);
        if (!copyImg($product->id, $image->id, $image_val, 'products', false))
        {
            $image->delete();
        }
    }
}

但它不起作用。它会在ps_image

上引发重复错误

任何想法如何使其发挥作用?

1 个答案:

答案 0 :(得分:0)

您无法将所有图片的属性设置为true

以下是ps_image表格中设置的相关索引:

 _________________________________________
| Name              | Unique | Column     |
|_________________________________________|
| id_product_cover  | Yes    | id_product |
|                   |        | cover      |
| idx_product_image | Yes    | id_image   |
|                   |        | id_product |
|                   |        | cover      |
|-----------------------------------------|

每件产品应该只有一个封面。

您可以通过以下方式更改代码:

$cover = true;
foreach ($image_arr as $image_val) {
    $image = new Image();
    $image->id_product = $product->id;
    $image->position = Image::getHighestPosition($product->id) + 1;
    $image->cover = $cover;
    if (($image->validateFields(false, true)) === true &&
        ($image->validateFieldsLang(false, true)) === true && $image->add())
    {
        $image->associateTo($product->id_shop_default);
        if (!copyImg($product->id, $image->id, $image_val, 'products', false))
        {
            $image->delete();
        }
    }

    if ($cover)
    {
        $cover = false;
    }
}