Jump to content

Image produit position 1 non reprise dans les commandes


Recommended Posts

Bonjour,

C'est certainement tout bête mais je ne trouve pas : J'ai x photos pour mes produits, et j'aimerais que ça soit, pour tous les produits, la photo en position 1 qui soit reprise pour les commandes et surtout les Bon de livraison.
Mais, Prestashop en décide autrement, j'ai l'impression qu'il a gardé en mémoire, pour certains produits, la première photo que j'ai mise et non le réglage de position que j'ai fait ensuite.

Y'a t'il une case que je dois cocher, un texte que je doit modifier, un code à changer ?

Merci d'avance

Agnès

Link to comment
Share on other sites

Bonjour,

Pour mon cas, non, l'image Cover est bien cochée pour chaque produit, mais, si c'est bien celle qu'il reprend pour le panier, ce n'est pas celle qu'il reprend pour la commande ou le BL.

J'ai peut être touché quelque chose pour lui demander de reprendre la photo n°1, mais ma mémoire est clairement défaillante, je ne me souviens pas, si je l'ai fait ou pas, et si oui, quel serait le fichier impacté. ( mais il ne me semble pas avoir touché la dedans )

Voici l'image, à gauche le panier avec les images cover, à droite la commande ( idem BL ) avec les photo position 1 pour les 2 premiers produits et une photo, qui se trouve en position 8, (première photo mise ) pour le dernier produit.

Merci pour votre intérêt !

Agnès

 

Capture d’écran 2018-03-12 à 08.55.29.png

Edited by Agnès_Ts (see edit history)
Link to comment
Share on other sites

Ok.

Plusieurs choses:

- Nativement, Prestashop n'affiche pas les images dans les bons de livraison, donc vous avez du modifier les fichiers de base

- L'image utilisée pour les facture est stockée dans le répertoire temporaire /img/temp

Le code va la chercher de cette manière:

$name = 'product_mini_'.(int)$order_detail['product_id'].(isset($order_detail['product_attribute_id']) ? '_'.(int)$order_detail['product_attribute_id'] : '').'.jpg';
$path = _PS_PROD_IMG_DIR_.$order_detail['image']->getExistingImgPath().'.jpg';

Ce sont les mêmes images qui sont utilisées dans le listing produits du BO.

Il faut savoir que ces images (product_mini_xxxx_xxx.jpg) sont générées à chaque affichage du listing justement, uniquement si elles n'existent pas déjà.

Une seule image est créée par produit.

Si vous modifiez les positions par la suite, cette miniature n'est pas mise à jour tant qu'elle est présente. Le seul cas où celle-ci est mise à jour, c'est si vous modifiez la couverture. (Voir la fonction processImage() dans productController.php)

Il faut donc aller dans /img/temp et supprimer tous les product_mini pour forcer la regénération ou modifier la fonction ajaxProcessUpdateImagePosition() comme suit:

    public function ajaxProcessUpdateImagePosition()
    {
        if ($this->tabAccess['edit'] === '0') {
            return die(Tools::jsonEncode(array('error' => $this->l('You do not have the right permission'))));
        }
        $res = false;
        if ($json = Tools::getValue('json')) {
            $res = true;
            $json = stripslashes($json);
            $images = Tools::jsonDecode($json, true);
            foreach ($images as $id => $position) {
                $img = new Image((int)$id);
                $img->position = (int)$position;
                if($position == 1) {
                    Image::deleteCover($img->id_product);
                    $img->cover = 1;
                }
                $res &= $img->update();
            }
        }
        if ($res) {
            $this->jsonConfirmation($this->_conf[25]);
            $id_product = Db::getInstance()->getValue('SELECT id_product FROM '._DB_PREFIX_.'image_shop WHERE id_image = '.(int)$id.' AND id_shop = '.(int)Context::getContext()->shop->id);
            @unlink(_PS_TMP_IMG_DIR_.'product_'.$id_product.'.jpg');
            @unlink(_PS_TMP_IMG_DIR_.'product_mini_'.$id_product.'_'.Context::getContext()->shop->id.'.jpg');
        } else {
            $this->jsonError(Tools::displayError('An error occurred while attempting to move this picture.'));
        }
    }

 

Edited by Eolia (see edit history)
  • Like 1
  • Thanks 1
Link to comment
Share on other sites

Génial !! Extra ! vous êtes génial :)

Merci vraiment, j'ai pris l'option 1, je mets en cover mon Image[1], je supprime les product_mini_xxxx_0.jpg qui ne sont pas ok pour quelques produits et Prestashop me génère la bonne vignette, puis je remets la vraie cover.

[ en fait, dans temp, j'ai 3 product_mini_ par Produit )

Tous mes Ti Sac ont retrouvé / vont retrouver leur maquette, je suis ravie !

Merci

Agnès

Edited by Agnès_Ts (see edit history)
Link to comment
Share on other sites

Houla non, du tout, mais bien 3 pour chaque produit

Product_mini_IDP_0.jpg correspond à ma photo 1
Product_mini_IDP_1.jpg correspond à ma cover
Product_mini_IDP.jpg est le parfait duplicata de la _0

 

pas bon signe ?

Prestashop utilise la IDP_1.jpg pour le panier et la liste des produits dans le BO

et la IDP_0.jpg pour la vignette des produits dans Order, facture et BL

l'autre, je ne sais pas

Edited by Agnès_Ts (see edit history)
Link to comment
Share on other sites

La 3ème ne devrait pas être là (peut-être créée par un override ou un module)

Pour la 0, il doit y avoir des endroits dans le code de votre boutique ou l'id_shop n'est pas défini et donc ça met null donc 0

Rien de grave (et pas très étonnant pour du code Prestashop^^)

Link to comment
Share on other sites

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...