Récemment


Images sur les BL ne s'affichent pas



  • Bonjour,
    petite questio, concernant l'affichage des images des produits sur les BL (pdf).

    J'ai fait un debug directement sur le fichier delivery-slip.product-tab.tpl de l'objet $order_detail dans la boucle. Et le champ 'image' est vide.

    Est-ce qu'il faut générer les images d'une manière ou d'une autre? ou sur quelle image se repose le template ?

    merci



  • C'est le champ 'image_tag' normalement.
    Dans HTMLTemplateDeliverySlip.php si vous n'avez pas d'override:

            if(Configuration::get('PS_PDF_IMG_DELIVERY')) {
                foreach($order_details as &$order_detail) {
                    if($order_detail['image'] != null) {
                        $name = 'product_mini_'.(int)$order_detail['product_id'].'_'
                            .(isset($order_detail['product_attribute_id']) ? (int)$order_detail['product_attribute_id'] : 0)
                            .'_'.$this->context->shop->id.'.jpg';
                        $path = _PS_PROD_IMG_DIR_.$order_detail['image']->getExistingImgPath().'.jpg';
    
                        $order_detail['image_tag'] = ImageManager::thumbnail($path, $name, 250, 'jpg', false);
    
                        if(file_exists(_PS_TMP_IMG_DIR_.$name)) {
                            $order_detail['image_tag'] = preg_replace('/alt=""/', 'width="45" height="45"', $order_detail['image_tag'], 1);
                        }
                    }
                }
                unset($order_detail);
            }
    


  • le code est identique.
    Du coup cela signifie que je n'ai peut-être pas de miniature ?



  • Du coup, vue que j'ai souvent des petits trucs qui déconnent ici et là, est-ce que ce serait pas mieux que je reparte d'une installation fraiche avec phenixSuite ?
    Et ensuite, ré-importer les tables et images produits, etc....

    Et si oui, avez-vous une astuce pour faire ça au mieux? ou un module, etc...

    merci d'avance.



  • Non, il faut trouver la cause.
    La liste des produits est générée par Order::getProductsDetail() dans laquelle sont assignées les images avec la fonction Order::setProductImageInformations().
    A voir si vous n'avez pas de surcharge (override) de la classe Order sur ces fonctions.
    Car si aucune image n'est trouvée les miniatures ne peuvent pas être générées.

        protected function setProductImageInformations(&$product)
        {
            if(isset($product['product_attribute_id']) && $product['product_attribute_id']) {
                $id_image = Db::getInstance()->getValue('
                    SELECT `image_shop`.id_image
                    FROM `'._DB_PREFIX_.'product_attribute_image` pai
                    '.Shop::addSqlAssociation('image', 'pai', true).'
                    INNER JOIN `'._DB_PREFIX_.'image` i
                        ON(i.`id_image` = pai.`id_image`)
                    WHERE pai.`id_product_attribute` = '.(int)$product['product_attribute_id']. '
                    ORDER by i.`position` ASC
                ');
            }
    
            if(!isset($id_image) || !$id_image) {
                $cover = Product::getCover($product['product_id']);
                if(isset($cover['id_image']))
                    $id_image = (int)$cover['id_image'];
            }
    
            $product['image'] = null;
            $product['image_size'] = null;
    
            if(isset($id_image)) {
                $product['image'] = new Image($id_image);
            }
        }
    


  • Si c'est bien la fonction qui se trouve dans le fichier classes/order/Order.php
    il y a une petite différence au niveau de la liaison dans la requete :

    protected function setProductImageInformations(&$product)
    {
    if(isset($product['product_attribute_id']) && $product['product_attribute_id']) {
    $id_image = Db::getInstance()->getValue('
    SELECT image_shop.id_image
    FROM '._DB_PREFIX_.'product_attribute_image pai
    '.Shop::addSqlAssociation('image', 'pai', true).'
    LEFT JOIN '._DB_PREFIX_.'image i
    ON(i.id_image = pai.id_image)
    WHERE pai.id_product_attribute = '.(int)$product['product_attribute_id']. '
    ORDER by i.position ASC
    ');
    }

        if(!isset($id_image) || !$id_image) {
            $cover = Product::getCover($product['product_id']);
            if(isset($cover['id_image']))
                $id_image = (int)$cover['id_image'];
        }
    
        $product['image'] = null;
        $product['image_size'] = null;
    
        if(isset($id_image)) {
            $product['image'] = new Image($id_image);
        }
    }
    

    Et si les overides sont forcément dans le dossier override à la racine.
    La seule chose qui est présente pour le fichier override/classes/order/Order.php, c'est ça :

    class Order extends OrderCore
    {
    /*
    * module: vosfacturesapp
    * date: 2024-01-16 10:48:43
    * version: 2.4.14
    */
    public function setInvoice($use_existing_payment = false)
    {
    require_once(PS_MODULE_DIR.'vosfacturesapp/vosfacturesapp.php');
    $module = new VosFacturesApp();
    if ($module->sendInvoice($this->id, false, true)) {
    parent::setInvoice($use_existing_payment);
    }
    }
    }



  • Vous pouvez mettre le INNER (qui force à ne ramener QUE ce qui matche) pour tester.
    Si toujours rien il faudra debuguer pas à pas pour trouver à quel endroit ça ne matche pas.



  • j'ai remis exactement comme l'exemple que vous m'avez envoyé, et ça ne change rien. les images ne s'affichent toujours pas.



  • Et en exécutant directement la requête en base de données (en remplaçant '.DB_PREFIX.' par votre préfixe) ?



  • @eolia a dit dans Images sur les BL ne s'affichent pas :

    $product['product_attribute_id']

    J'ai voulu essayer, mais du coup, je ne sais pas quoi mettre comme valeur pour $product['product_attribute_id'].
    Ce champ n'existe pas dans la table product.



  • Pouvez-vous m'envoyer un accès ftp par mail à eolia@eoliashop.com ?
    Ca ira plus vite ;)



  • Ok, trouvé et corrigé.
    Il y avait un mélange entre les 2 variables de configuration d'affichage des images pour les factures et/ou bon de livraison.
    Le correctif sera appliqué dans la 26 (fonctionnel chez vous en attendant).



  • super,
    merci bcp


Se connecter pour répondre