Jump to content

chargement CSS module "block search"


Recommended Posts

Prestashop version 1.4.1
Niveau php: connaissances de bases, bonne logique
Niveau HTML CSS: connaissance avancées
Connaissance prestashop: faible (2 sites en 1.3.6)


Bonjour,

Lorsque le module "Recherche rapide" (blocksearch) est greffer au HOOK de la colone de droite, la CSS liée au module (/themes/nomtheme/css/modules/blocksearch/blocksearch.css) n'est pas présente dans le header.

Par contre lorsque le module est greffé au HOOK de la colonne de Gauche ou le HOOK top, la balise CSS est bien présente dans le header.

Je suis un peu perdu car en analysant le blocksearch.php, j'ai remarqué que l'appel css ce faisait dans la function _hookCommon
Cette dernière est bien appelée par le HOOK de la colonne de droite, de plus le HOOK de la colonne de gauche (qui charge bien la css) semble être un appel direct du HOOK de droite (qui lui ne les charge pas).


//modules/blocksearch.php line 56

   public function hookLeftColumn($params) //Charge la CSS
   {
       return $this->hookRightColumn($params); 
   }

   public function hookRightColumn($params) //Ne charge pas la CSS
   {
       $this->_hookCommon($params);
       return $this->display(__FILE__, 'blocksearch.tpl');
   }

   public function hookTop($params) // Charge la CSS
   {
       $this->_hookCommon($params);
       return $this->display(__FILE__, 'blocksearch-top.tpl');
   }



Je n'ai pas décelé de changement significatif entre les différentes fonctions pour expliquer que la CSS ne se charge pas.

Est ce que le chargement de la CSS dépend d'un autre fichier ?

Si j'ai bien cerner le principe de la 1.4 la CSS est chargée grâce à cette fonction


//modules/blocksearch.php line 80

   private function _hookCommon($params)
   {
       global $smarty;
       $smarty->assign('ENT_QUOTES', ENT_QUOTES);
       $smarty->assign('search_ssl', (int)(isset($_SERVER['HTTPS']) && !empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off'));

       $ajaxSearch=(int)(Configuration::get('PS_SEARCH_AJAX'));
       $smarty->assign('ajaxsearch', $ajaxSearch);

       $instantSearch = (int)(Configuration::get('PS_INSTANT_SEARCH'));
       $smarty->assign('instantsearch', $instantSearch);
       if ($ajaxSearch)
       {
           Tools::addCSS(_PS_CSS_DIR_.'jquery.autocomplete.css');
           Tools::addJS(_PS_JS_DIR_.'jquery/jquery.autocomplete.js');
       }
       Tools::addCSS(_THEME_CSS_DIR_.'product_list.css');
       Tools::addCSS(($this->_path).'blocksearch.css', 'all');  //Ajout de la CSS pour chargement dans header ?
       return true;
   }



Ma question est donc

- Le chargement des CSS est-il gérer dans un autre fichiers que dans le .php du module ?

- Si ce n'est pas la cas, pourquoi mon module dans les HOOK Top et left charge bien la CSS et pas dans le HOOK de droite qui semble identique au HOOK top et qui semble être utilisé par le HOOK de gauche ?
Est ce que j'ai un problème au niveau de la logique d'utilisation ?

Merci d'avance

Link to comment
Share on other sites

J'ai bidouiller pour arriver à mon but, ça ne prend que 3 minutes mais ça pose des risque pour les mise à jours (bien pensé à refaire la modif) ou d'autre que je ne suis pas apte à identifier ?

Comme vu dans d'autres .php des modules j'ai fait en sorte d'ajouter une liaison avec le "hookHeader" pour le module block search dans lequel je lui dit simplement de charger la CSS, il faut ensuite greffer le module "recherche rapide" à "Header of page".

C'est pas très propre, c'est d'autant plus dommage que ce n'est nécessaire que pour le hookRight, mais je n'ai pu identifier le problème de liaison.

Dans le fichier blocksearch.php (à la racine du site /module/blocksearch/blocksearch.php) j'ai ajouter la liaison au hookHeader


//modules/blocksearch.php line 80

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

   public function hookRightColumn($params)
   {
       $this->_hookCommon($params);
       return $this->display(__FILE__, 'blocksearch.tpl');
   }

   public function hookTop($params)
   {
       $this->_hookCommon($params);
       return $this->display(__FILE__, 'blocksearch-top.tpl');
   }

//Ajout liaison Hookheader pour chargement de la CSS
   public function hookHeader($params)
   {
       Tools::addCSS(($this->_path).'blocksearch.css', 'all');
   }



J'ai ensuite lié le module "blocksearch/Recherche rapide" à "Header of page" dans l'admin/modules/position > Greffer un module.

Voila, c'est pas la solution du siècle, ça fonctionne, pour l'instant...

Link to comment
Share on other sites

Bonjour, il y a une "fonction" pour rajouter un css de module dans un page facilement, exemple:

   public function hookTop($params)
   {
        global $css_files;
           $css_files['modules/nom_du_module/nom_du_fichier_css.css'] = 'all';
...



Suffisait de demander.

Link to comment
Share on other sites

Bonjour et merci pour la réponse.

Petit précision pour d'autre personnes, le chemin de fichier doit être ciblé depuis la racine du site: le code se présenterait plutôt comme ceci (suivant mes tests, mais je peu me tromper);

        global $css_files;
           $css_files['/themes/nom_du_theme/css/modules/nom_du_module/nom_du_module.css'] = 'all';



Est ce que cette méthode apporte plus que la méthode suivante, utilisée dans le _hookCommon ?

Tools::addCSS('/themes/nom_du_theme/css/modules/nom_du_module/nom_du_module.css', 'all');
//(je trouve cet appel plus parlant) 



Mais principalement cela ne règle pas le problème, lorsque le module "blocksearch" n'est greffé que sur le hookRight, la CSS n'est pas appelée.
J'en revient à ma méthode de greffer le module sur un autre hook, et il me semblait logique de greffer le module sur le hook "Header of pages", ainsi le chemin de fichier reste "dynamique" ($this->_path) et non statique.

(je sais que je pourrais faire un lien en dur dans header.tpl ou autres, mais je tien vraiment à rester le plus possible dans le module)

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