2016-06-21 2 views
1

Я создал модуль, который автоматически добавит продукт в Prestashop, если он не существует.PHP - Prestashop добавляет несколько изображений в один продукт

Я следовал this предметам по этому вопросу и сумел заставить его работать при добавлении продукта с одним изображением. Но проблема в том, что я столкнулся с продуктом с несколькими изображениями.

Я попытался обернуть его в цикле Еогеасп так, что он повторяет процесс для каждого изображения:

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

Вы не можете установить все изображения, отмеченные на картинке: 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; 
    } 
}