Jump to content
yvonig

shopping cart product line image

Recommended Posts

Hello,

I ve got a prestashop 1.5.3.1...

http://www.france-tonnelles.com/

The problem is  I have a product with several combinations, I ve got an image per color, and several images which are associated with all colors..

Everything is ok in the product page, but in the shopping cart, the image is not the right color.

It is the one of these whitch are associated with all colors...

It is a bug ???

please help

Thank you

Share this post


Link to post
Share on other sites

je vais essayer en français :

lorsque j'ai plusieurs couleurs, une image par couleur et plusieurs images pour toutes les couleurs : 

L'image dans le panier est celle des images qui a l'id la plus petite dans la liste des images associée à l'attribut.(ps_product_attribut_image)

il faudrait  que ça soit celle dont la position dans (ps_image_product ) est la plus faible car les image associées à toutes les déclinaison sont des images de détail !

Le top serait même de pouvoir choisir une image 'cover' pour que ça marche pour toutes les situations !

Merci de votre aide

Share this post


Link to post
Share on other sites

Re,

 

Je ne suis pas sur de comprendre, mais il n'y a pas de position sur les images associées aux déclinaisons. Les positions sont entre les images, pas pas entre les images sur les déclinaisons. Donc effectivement c'est surement la première image associée a la couleur qui sort. Implémenter les positions dans chaque déclinaisons serait assez compliqué à mettre en œuvre en back office et en base de données je pense.

 

Cordialement

Share this post


Link to post
Share on other sites

Dans la class cart.php de prestashop :

vers la ligne 460 :
pai.`id_image` as pai_id_image, il.`legend` as pai_legend,
Je crois que cette requête sélectionne la première image d'un attribut (celle avec l'id la plus petite) de la table ps_product_attribute_image
qui contient deux champs : id_attribut et id_image
la table ' ps_image '  contient  4 champs : id_image ; id_product ; position ; cover
Moi ce que je voudrai; c'est que ce code selectionne l'image de ps_product_attribut_image qui a la "position" la plus petite dans ps_image...Ce qui permettrai d'avoir des images en commun pour des déclinaisons sans ce bug de panier...

Je crois pas que ce soit hyper compliqué pour des gens qui maîtrise cette syntaxe ...Ce qui n'est absolument pas mon cas !

Bonne journée

Share this post


Link to post
Share on other sites

Re,

 

Je vais créer un ticket en interne avec votre remarque mais il me semble que c’était le cas en 1.4 et que cette sous sélection en fonction des positions a été retirée depuis car elle consommait énormément de ressources. En gros comme vous le dites pour chaque déclinaison, il faut calculer la position minimum mais par rapport a une autre table.

 

Cordialement

Share this post


Link to post
Share on other sites

Bonjour,

alors peut-être plus simple, je voudrais que ce soit l'image avec l'id la plus grande qui soit dans la panier, à la place de la plus petite.

ça doit être quelque chose comme DESC, à la place de ASC mais je ne sais pas ou faire cette modif....

Cela permettrai au moins de choisir l'image en la chargeant en dernier.

Please help.

merci d'avance.

Cordialement

Share this post


Link to post
Share on other sites

ou alors peut-être encore plus simple...

Afficher les images par défaut du produit dans le panier sans tenir compte des déclinaisons ????

merci d'avance

Share this post


Link to post
Share on other sites

Je me répond pour cette dernière question :

il faut remplacer 

if (!isset($row['pai_id_image']) || $row['pai_id_image'] == 0)
{
$row2 = Db::getInstance()->getRow('
SELECT image_shop.`id_image` id_image, il.`legend`
FROM `'._DB_PREFIX_.'image` i'.
Shop::addSqlAssociation('image', 'i', false, 'image_shop.cover=1').'
LEFT JOIN `'._DB_PREFIX_.'image_lang` il ON (image_shop.`id_image` = il.`id_image` AND il.`id_lang` = '.(int)$this->id_lang.')
WHERE i.`id_product` = '.(int)$row['id_product'].' AND image_shop.`cover` = 1'
);
 
if (!$row2)
$row2 = array('id_image' => false, 'legend' => false);
else
$row = array_merge($row, $row2);
}
else
{
$row['id_image'] = $row['pai_id_image'];
$row['legend'] = $row['pai_legend'];
}
 
par
 
if (!isset($row['pai_id_image']) || $row['pai_id_image'] == 0)
{
$row2 = Db::getInstance()->getRow('
SELECT image_shop.`id_image` id_image, il.`legend`
FROM `'._DB_PREFIX_.'image` i'.
Shop::addSqlAssociation('image', 'i', false, 'image_shop.cover=1').'
LEFT JOIN `'._DB_PREFIX_.'image_lang` il ON (image_shop.`id_image` = il.`id_image` AND il.`id_lang` = '.(int)$this->id_lang.')
WHERE i.`id_product` = '.(int)$row['id_product'].' AND image_shop.`cover` = 1'
);
 
if (!$row2)
$row2 = array('id_image' => false, 'legend' => false);
else
$row = array_merge($row, $row2);
}
else
{
$row2 = Db::getInstance()->getRow('
SELECT image_shop.`id_image` id_image, il.`legend`
FROM `'._DB_PREFIX_.'image` i'.
Shop::addSqlAssociation('image', 'i', false, 'image_shop.cover=1').'
LEFT JOIN `'._DB_PREFIX_.'image_lang` il ON (image_shop.`id_image` = il.`id_image` AND il.`id_lang` = '.(int)$this->id_lang.')
WHERE i.`id_product` = '.(int)$row['id_product'].' AND image_shop.`cover` = 1'
);
 
if (!$row2)
$row2 = array('id_image' => false, 'legend' => false);
else
$row = array_merge($row, $row2);
}
dans Cart.php autout de la ligne 650
 
merci

Share this post


Link to post
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...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More