Jump to content

[RESOLU] Problème avec les images


sococa

Recommended Posts

Bonjour,
Je recense énormément de problèmes avec mes images produits.
Quand j'importe mes produits, il n'est pas rare que les images ne soient pas les bonnes ou ne soient tout simplement pas présentes.

Je sais qu'il y a un bouton 'régénérer les miniatures', mais je suis sur un hébergement hostinger et le temps de traitemente st trop long pour le serveur il n'arrive pas au bout.

Quand bien même, je ne comprends pas pourquoi l'import des produits cause tant de problème sur les images. Si quelqu'un pouvait m'éclairer un peu, ce serait super.

Merci d'avance,
Bonne journée

Edited by sococa (see edit history)
Link to comment
Share on other sites

Bonjour,

Si le traitement n'arrive pas au bout, vous pouvez revenir en arrière et le relancer en décochant cette fois-ci "Effacer les images précédentes". Vous pouvez refaire cette manipulation plusieurs fois jusqu'à ce que le traitement soit bien terminé.

Link to comment
Share on other sites

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

Edited by sococa (see edit history)
Link to comment
Share on other sites

  • sococa changed the title to [RESOLU] Problème avec les images

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...