Jump to content

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

Link to comment
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

Link to comment
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

Link to comment
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

Link to comment
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

Link to comment
Share on other sites

  • 7 months later...

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

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