tazeverywhere Posted October 13, 2010 Share Posted October 13, 2010 Hello tou-te-s,J'aimerais afficher la "short_description" du produit dans le détail de la commande (sur Mon Compte) (historique de commande - > detail) à côté du nom du produit. Malheureusement je n'arrive rien à afficher avec {$product->short_description}. Je pense qu'il doit y avoir une requête supplémentaire à faire dans OrderDetails.php pour que la variable arrive dans order-detail.tpl, mais je ne suis pas un pro de php et je veux bien un coup de main sur ce coup-là ;]Dans le même esprit, je devrais également afficher cette description dans la facture PDF.Une idée ?Merci d'avance!Taz - PS v1.3.1 Link to comment Share on other sites More sharing options...
tazeverywhere Posted October 14, 2010 Author Share Posted October 14, 2010 up!quelqu'un a une piste à me donner ? je sèche..merci. Link to comment Share on other sites More sharing options...
Atch Posted October 14, 2010 Share Posted October 14, 2010 Bonjour,Dans la requête envoyée au tpl order-detail il n' y a pas de variable smarty pour la description. Va falloir modifier la class qui génère les variables à cette étape.V++Atch Link to comment Share on other sites More sharing options...
tazeverywhere Posted October 14, 2010 Author Share Posted October 14, 2010 Hello Atch,merci pour ta réponse.Je suis un peu perdu ds le code php de ces classes, je ne suis pas développeur mais je comprends un peu php...Si tu as une piste je veux bien. C'est le seule problème qui me reste à résoudre ;]Bien à toi. Link to comment Share on other sites More sharing options...
tazeverywhere Posted October 15, 2010 Author Share Posted October 15, 2010 un petit up ?le problème c'est que pour le template order-detail.tpl, tout vient de la table order_detail et que bien sûr il n'y a pas la description dans cette table.. (juste les infos simplifiées de la commande) faudrait donc faire une requête en relation avec l'id du produit et allez chercher dans la table product la short_description...arrg.. comment on fait une requête qui met en relation 2 tables par rapport à l'id du produit?une piste pour un pauvre débutant ?merci d'avance :] Link to comment Share on other sites More sharing options...
Broceliande Posted October 15, 2010 Share Posted October 15, 2010 et si tu ne faisais pas une requête tirée par les cheveux mais simplement, dans OrderDetail.php (voir le code entre les commentaires tweak ), public function getFields() { parent::validateFields(); $fields['id_order'] = intval($this->id_order); $fields['product_id'] = intval($this->product_id); $fields['product_attribute_id'] = intval($this->product_attribute_id); $fields['product_name'] = pSQL($this->product_name); $fields['product_quantity'] = intval($this->product_quantity); $fields['product_quantity_in_stock'] = intval($this->product_quantity_in_stock); $fields['product_quantity_return'] = intval($this->product_quantity_return); $fields['product_quantity_refunded'] = intval($this->product_quantity_refunded); $fields['product_quantity_reinjected'] = intval($this->product_quantity_reinjected); $fields['product_price'] = floatval($this->product_price); $fields['product_quantity_discount'] = floatval($this->product_quantity_discount); $fields['product_ean13'] = pSQL($this->product_ean13); $fields['product_reference'] = pSQL($this->product_reference); $fields['product_supplier_reference'] = pSQL($this->product_reference); $fields['product_weight'] = floatval($this->product_weight); $fields['tax_name'] = pSQL($this->tax_name); $fields['tax_rate'] = floatval($this->tax_rate); $fields['ecotax'] = floatval($this->ecotax); $fields['download_hash'] = pSQL($this->download_hash); $fields['download_nb'] = intval($this->download_nb); $fields['download_deadline'] = pSQL($this->download_deadline); /* tweak product_description */ $product = new Product(intval($this->product_id)); $fields['product_description_short'] = $product->description_short; /* /tweak */ return $fields; } en principe dans le tpl tu devrais pouvoir à présent accèder à la valeur voulue par $product->product_description_short A noter que $product est en fait chargé avec les lignes de la table order_detail et non Product .Ps : ce n'est pas testé .Ps bis : il y a fort à parier en revanche que tu ne puisses obtenir la description courte en fonction de la langue, puisque OrderDetail n'a pas de constructeur et ne tient pas compte de la lanque (celà est fait bien en amont au moment de l'enregistrement de la commande).Si c'est aussi nécessaire , alors la fonction getFields doit accepter un paramètre id_lang : public function getFields($id_lang) { puis il faut trouver et modifier l'appel OrderDetail::getFields() avec un truc genre OrderDetail::getFields($cookie->id_lang) .Bien sur c'est abstrait , mais c'est juste une piste Link to comment Share on other sites More sharing options...
tazeverywhere Posted October 17, 2010 Author Share Posted October 17, 2010 Hello Brocellande,Merci beaucoup pour ton aide.En effet j'ai également besoin du multi-langue, donc merci pour ta deuxième piste.Je vais regarder ta proposition et je repasse :] Link to comment Share on other sites More sharing options...
tazeverywhere Posted October 17, 2010 Author Share Posted October 17, 2010 Alors j'ai essayé la solution simple pour afficher la description, sans tenir compte de la langue, et ça ne fonctionne malheureusement pas Un petit {debug} dans le tpl m'indique qu'aucune variable n'arrive dans le tableau $products.Rien ne s'affiche avec {$product->product_description_short}Je cherche encore sur cette piste mais si quelqu'un à une idée, çA me sauverait le week-end !Merci d'avance. Link to comment Share on other sites More sharing options...
Pierre-Yves Posted October 17, 2010 Share Posted October 17, 2010 Il y a quelque chose qu'il ne faut pas oublier... Avec SMARTY, on a la possibilité d'utiliser du PHP dans des TPL.Et donc, voici un petit code que tu peux mettre dans ton tpl pour solutionner ton problème. {php} global $cookie; $prod = new Product( intval($this->get_template_vars('productId')) ); $this->assign('product_description_short', $prod->description_short[ intval($cookie->id_lang) ]); {/php} Attention, tu dois le placer après les lignes suivantes : {assign var='productId' value=$product.product_id} {assign var='productAttributeId' value=$product.product_attribute_id} Ensuite, tu peux maintenant utiliser la variable suivante pour afficher la description_short où tu le souhaite : {$product_description_short} Voilà Link to comment Share on other sites More sharing options...
tazeverywhere Posted October 17, 2010 Author Share Posted October 17, 2010 Monsieur Pierre-Yves,vous m'avez sauvé mon week-end !Sans blague, merci mille fois pour cette nouvelle piste/solution toute faite!ça fonctionne à merveille! je ne connaissais pas cette possiblité et je ne sais pas si inclure du php dans le tpl change les perf de prestashop , mais en tout cas ça me permet de mettre en ligne mon shop demain matin ;]bonne fin de dimanche et merci a vous tous pour l'aide apportée !longue vie à prestashop et au forum☠TAZ☠ Link to comment Share on other sites More sharing options...
Pierre-Yves Posted October 17, 2010 Share Posted October 17, 2010 Mais de rien!Concernant les perf de PrestaShop si tu inclus du php dans tes tpl, cela n'a vraiment que très très peu d'importance. Au final ce n'est qu'un "eval()". Maintenant il est clair qu'il faut faire cela avec modération, et surtout pas n'importe où. Link to comment Share on other sites More sharing options...
tisc0 Posted November 15, 2010 Share Posted November 15, 2010 Hi!Merci à tous pour vos riches réponses.Je suis loin de bien comprendre le smarty, et la manière dont prestashop a créé ses classes (glurps), et du coup, j'aimerais utiliser des p'tits bout de code entre {php} dans mes TPL (pour éviter de toucher au Core)Dans ton bout de code PierreYves, comment puis-je appeler une valeur de champs d'un table autre que *ps_products_* ? (en l'occurence, j'aimerais appeler les champs de ma Custom-Table, que j'ai fièrment nommée : ps_product_foo !).Aussi, à quoi sert le global $cookie ?Et aussi, à quoi sert : {assign var='productAttributeId' value=$product.product_attribute_id} Merci ! :] Link to comment Share on other sites More sharing options...
tisc0 Posted November 15, 2010 Share Posted November 15, 2010 En fait, cette page est super : http://www.smarty.net/manual/fr/language.variables.php#language.assigned.variablesmais les assign moi me faut des variables d'array recup suite à une requête SQL, j'ai bon ? Du coup, j'aimerais savoir où se trouvent les requêtes sql dans prestashop pour intégrer quelque chose de propre dans mes balises {php} (qui à priori n'ont déjà pas grand chose à faire dans mon tpl... m'enfin). Link to comment Share on other sites More sharing options...
Pierre-Yves Posted November 15, 2010 Share Posted November 15, 2010 En fait, tu n'as pas vraiment d'endroit où les différentes requêtes sont listées. Pour chaque type d'objet, (les catégories, les produits, les tags, les pages CMS, etc...), tu as des classes toute faite, qui te permettent de travailler avec.Donc ton seul moyen de jongler avec les données va être d'apprendre ces classes et leur fonctionnement.Concernant le "global $cookie;". Cette ligne sert tout simplement à dire que l'on veut reprendre les cookies du visiteur car on va en avoir besoin. Link to comment Share on other sites More sharing options...
tisc0 Posted November 15, 2010 Share Posted November 15, 2010 OK, merci !Et à la question : Dans ton bout de code PierreYves, comment puis-je appeler une valeur de champs d’un table autre que ps_products_ ? (en l’occurence, j’aimerais appeler les champs de ma Custom-Table, que j’ai fièrment nommée : ps_product_foo !). -> pas possible, j'en conclue ? Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now