Jump to content

Image produit dans order-detail.tpl


Recommended Posts

Bonjour,

 

Je souhaiterais insérer une image miniature de chaque produit commandé dans la commande dans la page order-detail, à la place de la référence actuelle. (à gauche du nom du produit donc)

 

Je ne sais pas quoi modifier et j'aimerais de l'aide.

 

A priori j'imagine qu'il faut assigner une variable dans smarty, mais je ne sais pas quelle fonction et quelle variable.

 

Pouvez-vous m'aider ?

 

merci

Link to comment
Share on other sites

  • 1 month later...

je me permets de faire un up là dessus, j'ai travaillé autre chose depuis mais là maintenant ça m'intéresserait si quelqu'un pouvait m'aider....

 

merci

 

Dans OrderDetailController.php, il y a bien :

$products = $order->getProducts();

 

Donc là j'imagine qu'après dans le tpl je peux faire ceci :

 

<img src="{$link->getImageLink($product.link_rewrite, $product.id_image, 'small')}">

Mais rien ne s'affiche.

 

help please !

Link to comment
Share on other sites

Allez quoi une chtite aide pour quelqu'un à qui ça prendrait pas plus de 5mn :)

 

Dans Order.php, j'ai l'impression qu'il faut modifier :

 

public function getProductsDetail()
{
return Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('
SELECT *
FROM `'._DB_PREFIX_.'order_detail` od
WHERE od.`id_order` = '.(int)($this->id));
}

Pour aller chercher les images, donc j'ai mis :

 

public function getProductsDetail()
{
return Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('
SELECT *
FROM `'._DB_PREFIX_.'order_detail` od
LEFT JOIN '._DB_PREFIX_.'product p ON ( p.id_product = od.product_id)
LEFT JOIN '._DB_PREFIX_.'product_lang pl ON (pl.id_product = p.id_product)
LEFT JOIN '._DB_PREFIX_.'image i ON (i.id_product = p.id_product AND i.cover = 1)
WHERE od.`id_order` = '.(int)($this->id));
}

 

La fonction getProduct() devrait donc retourner $row['link_rewrite'] pour chaque produit.

 

Mais après dans order-detail.tpl, j'ai beau mettre un :

<img src="{$link->getImageLink($product.link_rewrite, $product.product_id, 'small')}">

ou autre chose, ça ne marche pas.

 

Qu'ai-je loupé ?

 

merci pleaaaaaaaase !

Link to comment
Share on other sites

  • 1 year later...
  • 1 month later...

Bonjour,

 

Je vous propose cette solution :

 

Rajouter ces lignes dans le fichier /controller/front/OrderDetailController.php, sous cette déclaration "$products = $order->getProducts();" (environ ligne 157 chez moi)

 

/* ************** modif quentin ***************** */

foreach($products as $key => $value) {

$objet_produit= new Product($value['product_id']);

 

$products[$key]['link_rewrite']= $objet_produit->link_rewrite;

$products[$key]['cover']= Product::getCover($value['product_id']);

}

/* ********************************************** */

 

Cette solution construira les variables que vous pourrait utiliser dans le fichier .tpl order-detail.tpl

 

Rajouter ensuite à l'endroit souhaitez dans votre fichier .tpl la ligne suivante :

<img src="{$link->getImageLink($product.link_rewrite, $product.cover.id_image, 'small')}" title="{$product.product_name|escape:'htmlall':'UTF-8'}" alt="{$product.product_name|escape:'htmlall':'UTF-8'}" />

 

 

PS : Important => Si vous modifiez des fichiers dans le core des controllers/classes de prestashop, celles-ci sont susceptibles d'être écrasées lors d'une MAJ de prestashop. Aussi il est peut être plus consciencieux de faire ces modifs dans le dossier /override/.

 

 

En espérant que cette solution fonctionnera pour tous.

 

Cordialement, Quentin.

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

Bonjour kent1 et merci de ta réponse.

 

Pour ma part c'est presque parfait mais il manque quelque chose :) Je m'explique.

Voici le type de lien obtenu pour l'image : www.maboutique.com / id_image - small / Array.jpg.

 

Mis à part Le "Array.jpg", je n'ai aucune image qui se charge. Pour la charger, j'aurai besoin de construire ce type de lien pour l'image : www.maboutique.com/ idproduit - idimage - small / Array.jpg.

 

Comment faire pour obtenir la valeur id_produit dans ce lien ??

 

Merci d'avance.

Link to comment
Share on other sites

Bonjour,

 

En principe le lien :

<img src="{$link->getImageLink($product.link_rewrite, $product.cover.id_image, 'small')}" title="{$product.product_name|escape:'htmlall':'UTF-8'}" alt="{$product.product_name|escape:'htmlall':'UTF-8'}" />

 

devrait vous afficher le produit.

 

 

Pour récup l'ID du prod ça devrait être {$product.product_id} ou {$product.id_product} ou {$id}. A tester ...

 

 

Cordialement.

Link to comment
Share on other sites

Effectivement c'est $product.product_id.

 

Par contre, je ne peux pas afficher plus de deux variables est-ce normal ?

 

En gros quand j'insère {$link->getImageLink($product.link_rewrite, $product.product.id, $product.cover.id_image, 'small')} il n'affiche que www.maboutique.com/ idproduit - idimage / Array.jpg et ne prends pas en compte "small".

Link to comment
Share on other sites

Vous êtes sensé le mettre sous la forme de mon premier post.

Dans le template de base prestashop 1.5.3 en tout cas ...

 

Faites moi un copier/coller de ce qui vous est affiché dans votre code du navigateur SVP afin que je comprenne mieux.

Link to comment
Share on other sites

Bonjour,

 

Je vous propose cette solution :

 

Rajouter ces lignes dans le fichier /controller/front/OrderDetailController.php, sous cette déclaration "$products = $order->getProducts();" (environ ligne 157 chez moi)

 

/* ************** modif quentin ***************** */

foreach($products as $key => $value) {

$objet_produit= new Product($value['product_id']);

 

$products[$key]['link_rewrite']= $objet_produit->link_rewrite;

$products[$key]['cover']= Product::getCover($value['product_id']);

}

/* ********************************************** */

 

Cette solution construira les variables que vous pourrait utiliser dans le fichier .tpl order-detail.tpl

 

Rajouter ensuite à l'endroit souhaitez dans votre fichier .tpl la ligne suivante :

<img src="{$link->getImageLink($product.link_rewrite, $product.cover.id_image, 'small')}" title="{$product.product_name|escape:'htmlall':'UTF-8'}" alt="{$product.product_name|escape:'htmlall':'UTF-8'}" />

 

 

PS : Important => Si vous modifiez des fichiers dans le core des controllers/classes de prestashop, celles-ci sont susceptibles d'être écrasées lors d'une MAJ de prestashop. Aussi il est peut être plus consciencieux de faire ces modifs dans le dossier /override/.

 

 

En espérant que cette solution fonctionnera pour tous.

 

Cordialement, Quentin.

Link to comment
Share on other sites

Le code me génère des liens (que ce soit a href et img src) sous la forme :

a href : .../22-Array.html

img src : .../70-small/Array.jpg"

 

J'ai réussi à faire afficher l'image du produit en intégrant $product.product_id mais les liens sont identitiques à ci-dessus...

Link to comment
Share on other sites

Essayez avec ce code à la place de l'autre :

 

/* ************** modif quentin ***************** */

$id_lang_default= Configuration::get('PS_LANG_DEFAULT');

foreach($products as $key => $value) {

$objet_produit= new Product($value['product_id']);

 

$products[$key]['link_rewrite']= $objet_produit->link_rewrite[$id_lang_default];

$products[$key]['cover']= Product::getCover($value['product_id']);

}

/* ********************************************** */

Link to comment
Share on other sites

Effectivement si vous avez un fichier OrderDetailController dans l'override, les modifs que j'indique plus haut sont peut être à mettre à jour.

 

Pour cela je vous invite à étudier les principes et limites de l'override.

Link to comment
Share on other sites

En faisant l'override, vous avez certainement dû copier le code complet de la méthode "public function initContent()".

 

Si tel est le cas, essayez de remplacer dans ce fichier override :

parent::initContent();

Par

FrontController::initContent();

 

Ça pourrait résoudre votre problème.

 

Cordialement, Quentin.

Link to comment
Share on other sites

Pouvez-vous mettre en pièce jointe de votre prochain post votre fichier "OrderDetailController" de la classe de base ainsi que celui de l'override. Et également votre fichier order-detail.tpl.

 

Ça sera peut être plus simple comme ça....

 

Avez vous une URL sur laquelle je pourrais voir votre affichage ?

Link to comment
Share on other sites

Le code exacte pour récup l'image dans le fichier .tpl est celui-ci sur ma boutique :

<img src="{$link->getImageLink($product.link_rewrite, $product.cover.id_image, 'small')}" title="{$product.product_name|escape:'htmlall':'UTF-8'}" alt="{$product.product_name|escape:'htmlall':'UTF-8'}" />

 

Chez vous, la méthode possède 4 argument et non 3 ...

 

Je joins mes 2 fichiers à ce post pour que vous puissiez avoir une idée + précise.

OrderDetailController.php

order_detail.txt

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

Je viens d'ajouter mes 2 fichiers aux post précédents.

 

Essayez avec ce code ci (si vous avez démarer avec un vieux prestashop) :

<img src="{$link->getImageLink($product.link_rewrite, $product.product_id|cat:'-'|cat:$product.cover.id_image, 'small')}" title="{$product.product_name|escape:'htmlall':'UTF-8'}" alt="{$product.product_name|escape:'htmlall':'UTF-8'}" />

  • Like 1
Link to comment
Share on other sites

Bingo !!!

<img src="{$link->getImageLink($product.link_rewrite, $product.product_id|cat:'-'|cat:$product.cover.id_image, 'small')}" title="{$product.product_name|escape:'htmlall':'UTF-8'}" alt="{$product.product_name|escape:'htmlall':'UTF-8'}" />

Merci infiniment !!! :lol:

Link to comment
Share on other sites

  • 1 year later...
  • 7 months later...
Est ce correct ce que j'ai fait dessous?
 
Dans Order.php
public function getProductsDetail()
{
return Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('
SELECT *
FROM `'._DB_PREFIX_.'order_detail` od
LEFT JOIN '._DB_PREFIX_.'product p ON ( p.id_product = od.product_id)
LEFT JOIN '._DB_PREFIX_.'product_lang pl ON (pl.id_product = p.id_product)
LEFT JOIN '._DB_PREFIX_.'image i ON (i.id_product = p.id_product AND i.cover = 1)
WHERE od.`id_order` = '.(int)($this->id));
}
 
Dans /controller/front/OrderDetailController.php
 
foreach($products as $key => $value) {
$objet_produit= new Product($value['product_id']);

$products[$key]['link_rewrite']= $objet_produit->link_rewrite;
$products[$key]['cover']= Product::getCover($value['product_id']);
}
 
ou bien
 
$id_lang_default= Configuration::get('PS_LANG_DEFAULT');
foreach($products as $key => $value) {
$objet_produit= new Product($value['product_id']);

$products[$key]['link_rewrite']= $objet_produit->link_rewrite[$id_lang_default];
$products[$key]['cover']= Product::getCover($value['product_id']);
}
 
Et dans order-detail.tpl
 
<img src="{$link->getImageLink($product.link_rewrite, $product.cover.id_image, 'small')}" title="{$product.product_name|escape:'htmlall':'UTF-8'}" alt="{$product.product_name|escape:'htmlall':'UTF-8'}" />

?

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