Jump to content

Problème hook sur page accueil prestashop 1.7.6.8


Recommended Posts

Bonjour a tous,

je travail actuellement sur un module et je rencontre un problème que j'ai du mal a solutionner.
Je suis attaché au hook displayProductPriceBlock et j'ai fais un sélecteur qui récupère des variables pour afficher ou pas mon module en fonction des pages affichées.
Ca fonctionne parfaitement sur toutes les pages mais pas sur l'index.
Sur l'index, sous le carroussel mon module se greffe bien et fonctionne correctement mais je ne peux pas le désactiver et le réactiver comme sur les autres pages.
Si je met la page en "off" dans mon administration, le module et toujours présent.
Si aprés avoir mis la page en off, je vide le cache le module disparait mais ne revient plus quand je remet sur "on" ????
J'ai refais un code minimaliste et totalement différent juste pour réglé ce problème mais code différent même problème.
Quelqu'un aurait une idée du problème ???
Je vous met un bout du code :
Merci d'avance pour votre aide

dans mon tpl 

{if $bj11displayindex eq '1' && $page.page_name eq 'index'}
   Index
   {/if}
{if $bj11displaycategory eq '1' && $page.page_name eq 'category'}
   Category
   {/if}
   {if $bj11displaysearch eq '1' && $page.page_name eq 'search'}
   Search
{/if}

Dans mon module :

public function assignDisplayPage() 
					{
					$displayindex = Configuration::get('DISPLAYINDEX'); 
					$displaycategory = Configuration::get('DISPLAYCATEGORY');
					$displaysearch = Configuration::get('DISPLAYSEARCH');
					
					$this->context->smarty->assign('displayindex', $displayindex); 
					$this->context->smarty->assign('displaycategory', $displaycategory);
					$this->context->smarty->assign('displaysearch', $displaysearch); 
					}
					
		public function hookDisplayProductPriceBlock($params)
    		{
			$this->assignDisplayPage();
			return $this->display(__FILE__, 'display.tpl');
			}

 

Link to comment
Share on other sites

Pour infos j'ai supprimé tous les modules de la page home et j'ai laissé uniquement le module "produits populaires" et c'est totalement pareil.
J'installe le module les fonctions sont toutes ok même sur la page en question mais impossible de modifier, sauf en vidant le cash et après ça mon module n'apparaît plus ???
Peut être a cause des nombreuses fonction contenant :

$this->_clearCache('*');

dans le module ps_featuredproducts ????

Bref toujours en galère ☹️

Link to comment
Share on other sites

Bonjour HeineFr et merci pour ton aide.

effectivement j’en suis la, mon module peux prendre 3 options 

1 On - en fonction avec un bouton et  un champs

2 on - en fonction avec seulement le bouton

3 off - rien ne s’affiChe

lorsque je j’installe le module à la première. actualisation de la page quelle que soit le mode choisi , il est bien exécuté.

le problème après ça plus de réaction jusqu’à ce que je desinstalle, à ce moment les infos ajoutées disparaissent ou si je le met en off et que je vide le cache,  le bouton disparaît mais en passant sur on rien ne revient, même pas en vidant le cache à nouveau.

 

Link to comment
Share on other sites

Essaye de vider le cache en renommant le dossier prod en _prod par FTP pour voir si tu as le même résultat qu'en vidant simplement le cache par le BO.

Personnellement j'utilise peu l'option de vidage du cache de prestashop mais un script perso faisant le ménage dans le dossier de cache.

Link to comment
Share on other sites

cool merci Heine 
ça m'a fait avancer un peux :-)
En renommant prod mon module change bien d'état, une fois puis faut renommer le nouveau dossier prod généré pour changer encore.
J'ai vu que dans FrontContainer.php mon module été assigné.
Je vais analyser la totalité du dossier prod pour voir ça.

Link to comment
Share on other sites

:rolleyes:

dans prod/smarty/cache/ps_featuredproducts/1/1/0/36/f7/00/
un fichier 36f700ce74c59c295e7bc29dd523ad20b603bc3b.psfeaturedproductsviewste.php est généré.
il crée l'affichage Produits populaires en dur.
Je le supprime manuellement a chaque changement et tout est ok.
Reste plus qu'a automatiser la tache.
Merci encore pour ton aide c'est cool B)

Link to comment
Share on other sites

voila c'est ok j'ai ajouter ce script qui est exécuté lorsque l'on clique sur le bouton du formulaire dans l'administration.

$dir = '../var/cache/prod/smarty/cache/ps_featuredproducts/';
						function deleteTree($dir){
    					foreach(glob($dir . "/*") as $element){
        				if(is_dir($element)){
            			deleteTree($element);       
            			rmdir($element); 
       	 				} else { 
           				 unlink($element);
        				}

 

Link to comment
Share on other sites

J'avais oublié 

deleteTree($dir); // On vide le contenu de notre dossier
rmdir($dir); // Et on le supprime

perso j'ai retiré la ligne rm($dir); car elle me retourne un warning si le dossier n'a pas été recréé et j'ai pas besoin d'effacer le dossier ps_featuredproducts mais juste son contenu.

Link to comment
Share on other sites

La fonction deleteTree() est interdite dans un module prestashop 😞

Dommage ça marchait nickel !!!

Je voudrais la remplacer et forcer le ficher tpl a se recompiler, je pense a utiliser getCache() mais je ne suis pas a l'aise avec cette fonction.

Quelqu'un aurait il des infos ??

Edited by newton (see edit history)
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...