我制作了一个模块,如果它不存在,它会自动将产品添加到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
任何想法如何使其发挥作用?
答案 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;
}
}