Jump to content

Edit History

sococa

sococa

Bonjour @Divine,

merci pour ta réponse rapide mais ce sera très laborieux comme il y a 3200 produits.

UPDATE : 
Lorsque j'importe mes produits, il manque des images.

Capturedcrandu2024-10-0716-34-22.thumb.png.0853cab2dcb149fee92c56761935a872.png

L'image du haut est bien récupérée via https://lebrun.fr/shop-pro/42-large_default/boite-de-6-chopes-jazz-30cl-forme-haute-en-verre-trempe-transparent.web
celle de droit recherche https://lebrun.fr/shop-pro/43-medium_default/boite-de-6-chopes-jazz-30cl-forme-haute-en-verre-trempe-transparent.jp
Et effectivement, l'a deuxiement image avec l'id 43 n'existe pas dans img/p/4/3 donc n'est pas créée à l'import des produits.

Je me demande s'il est normal que le code tente de charger d'abord une image 42-large_default puis une 43-medium_default. Ca en devrait pas être toujours 42 ?


Le problème vient-il du code déjà en place qui gère l'import des produits ? voici le code concernant les images :


    private function setImages(Product $product, array $row) : void
    {
        $this->setImage($product,$row["Image1"]);
        $this->setImage($product,$row["Image2"]);
        $this->setImage($product,$row["Image3"]);
        $this->setImage($product,$row["Image4"]);
        $this->setImage($product,$row["Image5"]);
        $this->setImage($product,$row["Image6"]);
        $this->setImage($product,$row["Image7"]);
        // Pour l'image de la marque
        if(file_exists(__DIR__."/../../files/imports/images/".$row["Article"]."-M.jpg")){
            $this->setImage($product,__DIR__."/../../files/imports/images/".$row["Article"]."-M.jpg");
        }
    }

    private function setImage(Product $product, string $imageUrl) : void
{
    if (!empty(trim($imageUrl))) {
        $filename = basename($imageUrl);
        $localPath = __DIR__ . "/../../files/imports/images/" . $filename;

        // Télécharge l'image si elle n'existe pas déjà localement
        if ($this->downloadImage($imageUrl, $localPath)) {
            $infoRow = $this->imageService->getInfoImage(substr($filename, 0, -4));

            if (is_int($infoRow["position"])) {
                $productImages = $product->getImages(1); // Récupère les images actuelles du produit

                // Cherche si une image existe déjà à cette position
                $productImage = array_search((int) $infoRow["position"], array_column($productImages, 'position'));

                // Comparaison des images existantes
                if ($productImage !== false) {
                    $existingImagePath = _PS_IMG_DIR_ . 'p/' . Image::getImgFolderStatic($productImages[$productImage]['id_image']) . $productImages[$productImage]['id_image'] . '.' . $productImages[$productImage]['image_format'];
                    
                    // Calcul du hash des deux images
                    if (file_exists($existingImagePath) && md5_file($existingImagePath) === md5_file($localPath)) {
                        // Si les images sont identiques, on ne fait rien
                        return;
                    }
                }

                // Si l'image n'existe pas ou est différente, la créer ou la mettre à jour
                if ($productImage === false) {
                    $this->imageService->createImage($product, $infoRow["position"], $localPath);
                } else {
                    $this->imageService->updateImage($product, $productImages[$productImage]["id_image"], $infoRow["position"], $localPath);
                }
            }
        } else {
            throw new Exception($product->reference . " : Image " . $filename . " introuvable \n");
        }
    }
}


private function downloadImage(string $url, string $path): bool
{
    // Tente de télécharger le contenu de l'image depuis l'URL
    $imageContent = @file_get_contents($url);
    if($imageContent === false) {
        // Si le téléchargement échoue, retourne false
        return false;
    }
    // Tente de sauvegarder le contenu téléchargé à l'emplacement spécifié
    return file_put_contents($path, $imageContent) !== false;
}


Merci

Capture d’écran du 2024-10-07 16-34-22.png

sococa

sococa

Bonjour @Divine,

merci pour ta réponse rapide mais ce sera très laborieux comme il y a 3200 produits.

UPDATE : 
Lorsque j'importe mes produits, il manque des images.

Capturedcrandu2024-10-0716-34-22.thumb.png.0853cab2dcb149fee92c56761935a872.png

L'image du haut est bien récupérée via https://lebrun.fr/shop-pro/42-large_default/boite-de-6-chopes-jazz-30cl-forme-haute-en-verre-trempe-transparent.web
celle de droit recherche https://lebrun.fr/shop-pro/43-medium_default/boite-de-6-chopes-jazz-30cl-forme-haute-en-verre-trempe-transparent.jp
Et effectivement, l'a deuxiement image avec l'id 43 n'existe pas dans img/p/4/3 donc n'est pas créée à l'import des produits.

Je me demande s'il est normal que le code tente de charger d'abord une image 42-large_default puis une 43-medium_default. Ca en devrait pas être toujours 42 ?


Le problème vient-il du code déjà en place qui gère l'import des produits ? voici le code concernant les images :


    private function setImages(Product $product, array $row) : void
    {
        $this->setImage($product,$row["Image1"]);
        $this->setImage($product,$row["Image2"]);
        $this->setImage($product,$row["Image3"]);
        $this->setImage($product,$row["Image4"]);
        $this->setImage($product,$row["Image5"]);
        $this->setImage($product,$row["Image6"]);
        $this->setImage($product,$row["Image7"]);
        // Pour l'image de la marque
        if(file_exists(__DIR__."/../../files/imports/images/".$row["Article"]."-M.jpg")){
            $this->setImage($product,__DIR__."/../../files/imports/images/".$row["Article"]."-M.jpg");
        }
    }

    private function setImage(Product $product, string $imageUrl) : void
{
    if (!empty(trim($imageUrl))) {
        $filename = basename($imageUrl);
        $localPath = __DIR__ . "/../../files/imports/images/" . $filename;

        // Télécharge l'image si elle n'existe pas déjà localement
        if ($this->downloadImage($imageUrl, $localPath)) {
            $infoRow = $this->imageService->getInfoImage(substr($filename, 0, -4));

            if (is_int($infoRow["position"])) {
                $productImages = $product->getImages(1); // Récupère les images actuelles du produit

                // Cherche si une image existe déjà à cette position
                $productImage = array_search((int) $infoRow["position"], array_column($productImages, 'position'));

                // Comparaison des images existantes
                if ($productImage !== false) {
                    $existingImagePath = _PS_IMG_DIR_ . 'p/' . Image::getImgFolderStatic($productImages[$productImage]['id_image']) . $productImages[$productImage]['id_image'] . '.' . $productImages[$productImage]['image_format'];
                    
                    // Calcul du hash des deux images
                    if (file_exists($existingImagePath) && md5_file($existingImagePath) === md5_file($localPath)) {
                        // Si les images sont identiques, on ne fait rien
                        return;
                    }
                }

                // Si l'image n'existe pas ou est différente, la créer ou la mettre à jour
                if ($productImage === false) {
                    $this->imageService->createImage($product, $infoRow["position"], $localPath);
                } else {
                    $this->imageService->updateImage($product, $productImages[$productImage]["id_image"], $infoRow["position"], $localPath);
                }
            }
        } else {
            throw new Exception($product->reference . " : Image " . $filename . " introuvable \n");
        }
    }
}


private function downloadImage(string $url, string $path): bool
{
    // Tente de télécharger le contenu de l'image depuis l'URL
    $imageContent = @file_get_contents($url);
    if($imageContent === false) {
        // Si le téléchargement échoue, retourne false
        return false;
    }
    // Tente de sauvegarder le contenu téléchargé à l'emplacement spécifié
    return file_put_contents($path, $imageContent) !== false;
}


Merci

Capture d’écran du 2024-10-07 16-34-22.png

×
×
  • Create New...