Jump to content

Afficher $product->short_description dans order-detail.tpl [Résolu]


Recommended Posts

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

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

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

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

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

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

  • 5 weeks later...

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

En fait, cette page est super :
http://www.smarty.net/manual/fr/language.variables.php#language.assigned.variables
mais 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

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

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

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