Jump to content

[résolu] Problème entre affichage produits phares en colonne et panier


Recommended Posts

Bonjour,

Je souhaitais disposer des produits phares dans une colonne, pour qu'ils soient visible sur tout le site.
Comme cette fonctionnalité n'est pas prévue d'origine (on ne peut mettre les produits phares que sur le centre de la page d'accueil) je me suis mis à modifier le code.

Je voulais un visuel identique aux produits déjà vus, donc j'ai étudié ce fichier, puis je l'ai adapté aux produits phares :
modification du homefeatured.php pour rajouter une fonction hookLeftColumn($params)
identique à celle hookHome, sauf que je charge un nouveau .tpl à la fin : homefeatured-col.tpl
qui lui est donc basé sur le .tpl des déjà vus.

jusque là tout va bien, j'affiche correctement mes produits phares (faudra que je poste ma contrib' plus tard d'ailleurs :)
en visualisant le panier vide, c'est ok. Par contre quand j'ajoute au moins un produit, ça dérape sévère en le visualisant!

En fait il affiche tous les produits phares comme si ils étaient dans le panier! avec des réactions bizarres : marqués indisponible, quantité à 0, prix unitaire 0... et mon produit qui devrait être tout seul n'est même pas là! Le panier en colonne fonctionne bien lui.

Sinon le calcul du prix est bon, on peut continuer la commande tout se passe bien, le problème se situe juste à l'affichage du panier. Dès que je désactive les produits phares de la colonne, hop c'est corrigé!

voir l'image jointe

Je ne vois pas trop pourquoi il y a un "conflit" entre l'affichage du panier et le module produits phares... Si vous avez des idées je suis preneur :)

36454_SS0z4tbYv9l1vvpencZb_t

Link to comment
Share on other sites

Petit complément, j'ai essayé en le plaçant sur la colonne de droite (donc en rajoutant juste dans le homefeatured.php une fonction hookRightColumn($params) identique à la ...Left..., puis en le supprimant la greffe à gauche et en faisant la greffe à droite

et là, aucun problème d'affichage, le panier est tout bon !?

Link to comment
Share on other sites

je suis en train de chercher du côté de ces fichiers :

themes/nom du theme/shopping-cart.tpl
themes/nom du theme/shopping-cart-product-line.tpl

car c'est vraiment quand il affiche la ligne du produit dans le panier que ça pose problème, au lieu de prendre les produit effectivement dans le panier, il prend les attributs des produits phares (du moins l'image, la description et le lien)

par contre au-dessus, le "dernier produit ajouté" est bon, le "votre panier contient X produits" aussi, ainsi que les prix HT, TTC, port...

Link to comment
Share on other sites

Nouvel essai :

J'ai réinstallé une boutique "vierge" d'origine avec les produits de démonstrations et les modules par défaut installés, sur un autre pc.
J'ai uniquement rajouté dans le fichier /modules/homefeatured/homefeatured.php :

function hookLeftColumn($params)
{
   return $this->hookHome($params);
}

function hookRightColumn($params)
{
   return $this->hookHome($params);
}



puis j'ai greffé le module sur la colonne de gauche, le problème est présent
sur la colonne de droite pas de problème

donc ça ne vient pas de mes autres modifications puisque le comportement est identique sur une boutique toute neuve...

Link to comment
Share on other sites

  • 1 month later...

c'est beau tout ça, mais est ce que vous pouvez nous donner un lien vers la boutique pour voir de prés.
et autre chose, vous n'aurez pas dù refaire le module comme le moduledéjàvu parce que c'est pas identique, donc votre problème est sur le fichier tpl que vous avez modifié.
Ps: vous avez remarquer sans doute que personne ne vous a répondu, ba c'est simple, on peut pas comprendre et déterminer un problème si on le voit pas de prés.

Link to comment
Share on other sites

Je pensais avoir décrit suffisamment correctement le problème, et puis avec l'image jointe, on voit bien le comportement bizarre
c'est une boutique d'essai, voici un lien :

http://afipc.no-ip.biz/prestashop/

pour voir le problème, il faut ajouter un produit au panier, puis visualiser le panier
là, le module homefeatured est dans la colonne de gauche, si je le met dans la droite il n'y a pas le problème
(et l'affichage est géré par le .tpl d'origine, j'ai juste modifié le .php pour pouvoir le greffer sur les colonnes -> voir le post #4)

"vous n’aurez pas dù refaire le module comme le moduledéjàvu parce que c’est pas identique"
-> même sans modifier le .tpl original, il y a le souci -> voir le post #4
et en plus, avec mon .tpl modifié et greffé sur la colonne de droite, aucun problème

Link to comment
Share on other sites

oui, qu'on l'ajoute au panier depuis n'importe ou, le problème se présente quand on visualise le panier

ce n'est pas nécessaire de le désinstaller, je l'enlève juste de la colonne de gauche et le problème disparait
(et comme je disais, si je le met dans la droite, pas de problème)

voici le module homefeatured, mais je n'ai rien modifié à part le .php pour rajouter au bout :

   function hookLeftColumn($params)
   {
       return $this->hookHome($params);
   }

   function hookRightColumn($params)
   {
       return $this->hookHome($params);
   }

homefeatured.zip

Link to comment
Share on other sites

Salut ,

modification du homefeatured.php pour rajouter une fonction hookLeftColumn($params)
identique à celle hookHome, sauf que je charge un nouveau .tpl à la fin : homefeatured-col.tpl
qui lui est donc basé sur le .tpl des déjà vus.


J'imagine que tu charges ce tpl à partir du .tpl précédent ? je veux dire par un {include file= .... } ?

Car si c'est le cas, smarty perd les données du tpl parent, que tu dois repasser en variable au tpl inclus :

{include file=' file.tpl' mavariable=$mavariable mavariable2=$mavariable2 etc.... }



Dans ton cas peut être simplement la variable $products , peut être plus , tout dépend de ce qu'il y a dans le tpl ($combinations par ex )

Link to comment
Share on other sites

Salut,
hum non je n'ai pas mis de include file comme tu l'indique, voici le code à la fin dans le fichier homefeatured.php :

function hookHome($params)
   {
       global $smarty;

       $category = new Category(1);
       $nb = intval(Configuration::get('HOME_FEATURED_NBR'));
       $products = $category->getProducts(intval($params['cookie']->id_lang), 1, ($nb ? $nb : 10));
       $smarty->assign(array('products' => $products, 'homeSize' => Image::getSize('home')));

       return $this->display(__FILE__, 'homefeatured.tpl');
   }

   function hookLeftColumn($params)
   {
       global $smarty;

       $category = new Category(1);
       $nb = intval(Configuration::get('HOME_FEATURED_NBR'));
       $products = $category->getProducts(intval($params['cookie']->id_lang), 1, ($nb ? $nb : 10));
       $smarty->assign(array('products' => $products, 'homeSize' => Image::getSize('home')));

       return $this->display(__FILE__, 'homefeatured-col.tpl');
   }

   function hookRightColumn($params)
   {
       global $smarty;

       $category = new Category(1);
       $nb = intval(Configuration::get('HOME_FEATURED_NBR'));
       $products = $category->getProducts(intval($params['cookie']->id_lang), 1, ($nb ? $nb : 10));
       $smarty->assign(array('products' => $products, 'homeSize' => Image::getSize('home')));

       return $this->display(__FILE__, 'homefeatured-col.tpl');
   }



smarty reprend donc les mêmes valeurs que si il est greffé au centre
par contre je ne vois pas comment faire avec ta méthode utilisant un include file, peux-tu m'en dire plus?

@ Maymo :
"soit tu enlève la fonction ajouter au panier et voir si ça passera"
-> ce n'est pas lié au fait d'ajouter au panier, c'est quand on le visualise, je ne vois pas pourquoi tu dis cela?

Link to comment
Share on other sites

En fait non tu peux oublier le include file , ceci est fait lorsque tu veux inclure un tpl dans un autre , ce que je croyais que tu avais fait.
Le résultat que je vois sur ton site ne m'étonne pas plus que ça : smarty se mélange grave les pinceaux ici, avec des variables de même nom déclarées plusieurs fois .
J'étais parti au départ pour te dire que dans tous les cas , recopier le code du hookLeft dans hooRight ou inversement ne peut pas être la bonne solution. Ton approche de départ était la meilleure :

public function hookRightColumn($params)
{
 return $this->hookLeftColumn($params);
}



ou inversement selon que le code complet se trouve dans left ou right mais bon là je sais que tu me suis.

Ce qui se passe est que tu as la variable $product utilisée pour charger tes données.
Or même sans vérifier, au vu du résultat, je parierais fort que ce même nom de variable est utilisé pour les produits du panier. D'ou l'incohérence d'affichage.

Le problème ne se pose pas dans le hookHome puisqu'il n'est pas appelé dans la page de visualisation du panier.

Tu peux soit m'envoyer la totalité du code , pour que je t'adapte les variables surtout dans ton *col.tpl (j'en ai pour 5mn), soit les remplacer toi même, par exemple

dans le php :

    function hookLeftColumn($params)
   {
       global $smarty;

       $category = new Category(1);
       $nb = intval(Configuration::get('HOME_FEATURED_NBR'));
       $products = $category->getProducts(intval($params['cookie']->id_lang), 1, ($nb ? $nb : 10));
       $smarty->assign(array('modFeatureProducts' => $products, 'homeSize' => Image::getSize('home')));

       return $this->display(__FILE__, 'homefeatured-col.tpl');
   }

   function hookRightColumn($params)
   {
       return $this->hookLeftColumn($params);
   }



et dans homefeatured-col.tpl , que tu édites , tu fait un 'remplacer tout' de $product par $modFeatureProducts

Je pense qu'avec ça le tour est joué.

Désolé de pas avoir regardé plus tôt.

PS : tiens nous au courant ;)

Link to comment
Share on other sites

Merci pour ces précisions concernant le smarty, mais en fait ça ne peut pas venir de là, car en fait hum je t'ai un peu induit en erreur tu m'excuseras :)

le code du php de mon précédent message correspond donc à ce que je veux avoir au final, c'est à dire rajouter 2 fonctions hook left et right, qui chargent un homefeatured-col.tpl pour changer d'affichage par rapport au homefeatured.tpl original. Ca on peut laisser tomber pour l'instant

car en fait, dans le site exemple que j'ai donné
http://afipc.no-ip.biz/prestashop
il y a encore moins de modifications que cela dans le homefeatured.php, que je te met ici :

    function hookHome($params)
   {
       global $smarty;

       $category = new Category(1);
       $nb = intval(Configuration::get('HOME_FEATURED_NBR'));
       $products = $category->getProducts(intval($params['cookie']->id_lang), 1, ($nb ? $nb : 10));
       $smarty->assign(array('products' => $products, 'homeSize' => Image::getSize('home')));

       return $this->display(__FILE__, 'homefeatured.tpl');
   }

   function hookLeftColumn($params)
   {
       return $this->hookHome($params);
   }

   function hookRightColumn($params)
   {
       return $this->hookHome($params);
   }



et donc le tpl chargé est celui d'origine

comme tu vois, dans le site exemple, pas de souci pour smarty, vu que les hook left et right renvoient directement sur home. Là si tu regarde le site, les produits phares sont dans la colonne de gauche, donc si tu ajoute des produits au panier et que tu le visualise tu verras le souci.

---
"Ce qui se passe est que tu as la variable $product utilisée pour charger tes données.
Or même sans vérifier, au vu du résultat, je parierais fort que ce même nom de variable est utilisé pour les produits du panier. D’ou l’incohérence d’affichage.

Le problème ne se pose pas dans le hookHome puisqu’il n’est pas appelé dans la page de visualisation du panier."
---
-> je suis d'accord mais pourquoi quand je le met dans la droite il n'y a pas de souci, alors que c'est aussi appelé quand on visualise le panier de la même façon?

Link to comment
Share on other sites

"Ce qui se passe est que tu as la variable $product utilisée pour charger tes données.
Or même sans vérifier, au vu du résultat, je parierais fort que ce même nom de variable est utilisé pour les produits du panier. D’ou l’incohérence d’affichage."

-> effectivement c'est ce que je me suis dit aussi, que le panier devait utiliser une variable commune avec le homefeatured
mais si le problème apparaissait aussi en colonne de droite, ça confirmerait cette réflexion, or ce n'est pas le cas...

Link to comment
Share on other sites

Ok donc pour ce que tu veux au final , je t'ai répondu lol.

Pour l'actuel, c'est la même punition :

mais en fait ça ne peut pas venir de là


je dirais sisisi!

mais si le problème apparaissait aussi en colonne de droite, ça confirmerait cette réflexion, or ce n’est pas le cas…



je dirais resisisi : pourquoi ne pas juste essayer ;) ?
Cela ne marche dans la colonne de droite que parce que le panier est déja affiché.

Voici ce que je pense qu'il se passe (en très grossier) si tu affiches a gauche + à droite:
0) cart.php assigne $products avec les produits du panier, puis laisse la main aux hooks :
header
top
left
1) colonne de gauche : le module assigne $products avec les produits phares, et s'affiche correctement
include du tpl associé au panier
2) la colonne centrale affiche le panier , mais pour une raison lambda, ne réassigne pas $products , ici ce n'est pas un hook, mais un tpl du theme
right
3)ben là c'est la même on n'a plus les produits phares dans $products surement une erreur smarty à ce moment

Encore une fois , je pense que tu devrais essayer

Link to comment
Share on other sites

ça avance! :) en effet tu as raison c'est le même genre de problème!

alors j'ai fais un premier test avec une erreur, que je vais quand même te décrire car c'est intéressant!

mon php :

    function hookHome($params)
   {
       global $smarty;

       $category = new Category(1);
       $nb = intval(Configuration::get('HOME_FEATURED_NBR'));
       $products = $category->getProducts(intval($params['cookie']->id_lang), 1, ($nb ? $nb : 10));
       $smarty->assign(array('products' => $products, 'homeSize' => Image::getSize('home')));

       return $this->display(__FILE__, 'homefeatured.tpl');
   }

   function hookLeftColumn($params)
   {
       global $smarty;

       $category = new Category(1);
       $nb = intval(Configuration::get('HOME_FEATURED_NBR'));
       $products = $category->getProducts(intval($params['cookie']->id_lang), 1, ($nb ? $nb : 10));
       $smarty->assign(array('colproducts' => $products, 'homeSize' => Image::getSize('home')));

       return $this->display(__FILE__, 'homefeatured.tpl');
   }

   function hookRightColumn($params)
   {
       return $this->LeftColumn($params);
   }



donc dans hook left ce n'est plus "products" mais "colproducts", et j'ai dupliqué le homefeatured.tpl en homefeatured-col.tpl, puis recherché/remplacé dedans "$products" par "$colproducts"

par contre j'ai oublié de mettre le bon tpl comme tu vois

il utilise l'original avec products, et par exemple sur la page d'accueil je n'ai plus de produits phare dans la colonne de gauche (normal hin :)
mais quand je visualise le panier, hop les produits qui sont dedans deviennent aussi des produits phares!
ce qui prouve bien que c'est le même nom de variable "products" qui est utilisé! ;)
----------------------

je corrige donc le hook left pour mettre le bon tpl
return $this->display(__FILE__, 'homefeatured-col.tpl');

et là, ça marche! le panier est correct et mes produits phares sont dans la colonne! super

hum par contre maintenant quand je le met dans la colonne de droite, c'est pire lol
il ne m'affiche plus aucun module de cette colonne! (j'ai testé en le mettant uniquement à droite, et aussi à droite et à gauche)

crois-tu que je sois obligé de refaire une autre distinction? c'est à dire de faire un hook right avec un "colrightproducts"
un nouveau tpl homefeatured-col-right.tpl?

en tout cas merci pour ton aide

Link to comment
Share on other sites

en effet, j'ai dû refaire la même chose pour le hook right et c'est bon!

le php :

    function hookHome($params)
   {
       global $smarty;

       $category = new Category(1);
       $nb = intval(Configuration::get('HOME_FEATURED_NBR'));
       $products = $category->getProducts(intval($params['cookie']->id_lang), 1, ($nb ? $nb : 10));
       $smarty->assign(array('products' => $products, 'homeSize' => Image::getSize('home')));

       return $this->display(__FILE__, 'homefeatured.tpl');
   }

   function hookLeftColumn($params)
   {
       global $smarty;

       $category = new Category(1);
       $nb = intval(Configuration::get('HOME_FEATURED_NBR'));
       $products = $category->getProducts(intval($params['cookie']->id_lang), 1, ($nb ? $nb : 10));
       $smarty->assign(array('colproducts' => $products, 'homeSize' => Image::getSize('home')));

       return $this->display(__FILE__, 'homefeatured-col.tpl');
   }

   function hookRightColumn($params)
   {
       global $smarty;

       $category = new Category(1);
       $nb = intval(Configuration::get('HOME_FEATURED_NBR'));
       $products = $category->getProducts(intval($params['cookie']->id_lang), 1, ($nb ? $nb : 10));
       $smarty->assign(array('col2products' => $products, 'homeSize' => Image::getSize('home')));

       return $this->display(__FILE__, 'homefeatured-col2.tpl');
   }
}



Merci beaucoup pour ton aide!
:)

Link to comment
Share on other sites

J'avais préparé ça pour toi (voir fichier joint), pas eu le temps d'envoyer
Il n'est pas nécessaire en principe de refaire la manip pour le hookright

Il suffit d'avoir :

function hookRightColumn($params)
{
    return $this->hookLeftColumn($params);
}



Sinon c'est redondant.

Regarde mon code, j'appelle 3 fois le même hook , et ça marche

homefeatured (1).zip

Link to comment
Share on other sites

  • 4 weeks later...

ça marche bien encore merci mais attention il faut remplacer $products par $modFeatureProducts et non $product. ça change tout et ça marche mieux ;-)


...
et dans homefeatured-col.tpl , que tu édites , tu fait un 'remplacer tout' de $product par $modFeatureProducts

Je pense qu'avec ça le tour est joué.

Désolé de pas avoir regardé plus tôt.

PS : tiens nous au courant ;)
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...