2016-06-21 10 views
1

Prestashopに製品が存在しない場合は、自動的に製品を追加するモジュールを作成しました。PHP - Prestashop複数の画像を1つの製品に追加する

私はこの件に関してthis件の件名を辿り、1つの画像を含む商品を追加するときにそれを動作させることができました。しかし、問題は複数の画像を持つ製品に遭遇したときです。

は、私はそれがすべての画像のための処理を繰り返し実行するように、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

すべての画像のカバープロパティをtrueに設定することはできません。

ここps_imageテーブルの上に設定され、関連する指標である:

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

は、製品ごとに1つだけのカバーがあるはずです。

あなたはあなたのコードは、この方法を変更することができます

$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; 
    } 
} 
関連する問題