Jump to content

CSS d'un module specifique à un theme


Recommended Posts

Bonjour,

j'ai créé un petit module tout simple qui permet d'ajouter des blocs dans la home

Ce module s'appelle elementsblocshome

Ce module se trouve dans themes/MonTheme/modules

 

Je veux maintenant lui assigner un CSS spécifique à mon theme.

J'ai donc ce code dans mon fichier elementsblocshome.php

 

public function hookHome($params)
{
 global $smarty;

 $smarty->assign(array());
 Tools::addCSS(($this->_path).'elementsblocshome.css', 'all');
 return $this->display(__FILE__, 'elementsblocshome.tpl');
}

Et j'ai ainsi créé le fichier elementsblocshome.css dans themes/MonTheme/modules/elementsblocshome

 

Malheureusement aucun appel a ce fichier css n'est fait, tandis que les modifs que j'apporte à elementsblocshome.tpl sont bien prises en compte.

 

Qu'ai-je manqué ?

 

Merci

Link to comment
Share on other sites

Merci pour ta reponse.

J'ai remarqué 2 choses:

1- j'ai fait une erreur dans mon premier post, mon css se trouve bien dans themes/Montheme/css/modules/elementsblocshome/elementsblocshome.css

2- Apparemment je fais fausse route depuis le debut, mon module elementsblocshome n'est pas appelé depuis themes/MonTheme/modules/elementsblocshome mais depuis modules/elementsblocshome

 

Il me manque apparemment l'information permettant de definir que mon module doit etre appelé depuis themes/MonTheme/modules/elementsblocshome

Link to comment
Share on other sites

Un module doit être dans le répertoire modules du site, le répertoire modules du thème ne sert qu'à mettre le tpl (par exemple un module d'origine que l'on modifie et afin de préserver les futures mises à jour, on créait un dossier du même nom que le module et que l'on place dans le répertoire module du thème (ce dossier ne contient que le tpl modifié). Prestashop regarde en priorité dans ce répertoire et tient compte des tpl s'y trouvant.

Pour que le css soit pris en compte il faut déclarer le module ou alors placer le css dans le dossier du module avec appel depuis le TPL (inconvénient: une erreur w3c) ou alors mettre le css directement dans le global.css.

Link to comment
Share on other sites

essaye avec :

 


public function hookTop($params)
{
 global $smarty, $css_files;

 $smarty->assign(array());
$css_files[($this->_path).'elementsblocshome.css'] = 'all';
 Tools::addCSS(($this->_path).'elementsblocshome.css', 'all');
 return $this->display(__FILE__, 'elementsblocshome.tpl');
}



Link to comment
Share on other sites

Un module doit être dans le répertoire modules du site, le répertoire modules du thème ne sert qu'à mettre le tpl

Ok merci je ne savais pas

Pour que le css soit pris en compte il faut déclarer le module

Peux-tu m'expliquer comment faire stp ?

 

ou alors placer le css dans le dossier du module avec appel depuis le TPL (inconvénient: une erreur w3c)

C'est ce que j'essaie de faire en prenant pour exemple un autre module avec son css declaré dans le dossier du module(comme blocksearch par exemple)... mais sans succes

 

 

ou alors mettre le css directement dans le global.css.

Oui ça fonctionne impecc mais justement je ne veux pas trop surcharger le global.css

essaye avec :

 


public function hookTop($params)
{
 global $smarty, $css_files;

 $smarty->assign(array());
$css_files[($this->_path).'elementsblocshome.css'] = 'all';
 Tools::addCSS(($this->_path).'elementsblocshome.css', 'all');
 return $this->display(__FILE__, 'elementsblocshome.tpl');
}



J'ai essayé ceci sans succes...

en ce qui me concerne c'est hookHome a la place de hookTop mais ça ne change rien...

Link to comment
Share on other sites

c'est hookTop et non pas hookHome qu'il faut utiliser.

 

si ça fonctionne pas essaye de remplacer

 

($this->_path).'elementsblocshome.css'

 

par :

 

_MODULE_DIR_.'/elementsblocshome/elementsblocshome.css'

 

(je suppose que le nom du module est elementsblocshome)

Link to comment
Share on other sites

c'est hookTop et non pas hookHome qu'il faut utiliser.

 

si ça fonctionne pas essaye de remplacer

 

($this->_path).'elementsblocshome.css'

 

par :

 

_MODULE_DIR_.'/elementsblocshome/elementsblocshome.css'

 

(je suppose que le nom du module est elementsblocshome)

Je suis un peu perdu la...

Mon module fonctionne bien avec hookHome...

C'est un module qui ne concerne que la home, je n'en ai pas l'utilité dans les autres pages

Il est greffé sur homepage content

 

J'ai tout de meme testé en mettant donc hookHome, mais la plus rien ne s'est affiché.

 

J'ai ensuite un peu bidouillé en faisant ceci

public function hookTop($params)
{
  global $smarty, $css_files;

  $smarty->assign(array());
  $css_files[_MODULE_DIR_.'/elementsblocshome/elementsblocshome.css'] = 'all';
  Tools::addCSS(_MODULE_DIR_.'/elementsblocshome/elementsblocshome.css', 'all');
  return $this->display(__FILE__, 'elementsblocshome.tpl');
}
public function hookHome($params)
{
 $this->hookTop($params);
 return $this->display(__FILE__, 'elementsblocshome.tpl');
}

 

La mon module s'affiche bien, mais le css utilisé est toujours "global.css", je n'ai toujours aucun appel a "elementsblocshome.css"

Link to comment
Share on other sites

Oui

Avec ta methode(donc sans mettre de hookHome), lorsque je souhaite greffer mon module sur Homepage Content, j'ai le message "impossibled egreffer le module sur ce hook", et en ajoutant les lignes citées plus haut(hookHome), ça ne change rien à mon souci de css...

Link to comment
Share on other sites

C'est ce que j'ai fait, et je peux lire ceci

Pour personnaliser la greffe d'un module sur un point d'accroche, vous devez lui déterminez sa fonction PHP pour le point d'accroche.

Donc ça veut dire que si je veux accrocher un module à Homepage Content, je dois donc utiliser hookHome...

Je n'ai toujours pas compris pourquoi tu veux utiliser hootTop ?

 

Tous ces soucis sont "embetants" d'un point de vue intellectuel car je comprends pas et ça m'enerve, mais je peux facilement contourner le probleme en utilisant global.css...

 

Mais la j'ai un nouveau souci: les traductions !

dans mon fichier elementsblocshome.tpl j'ai ceci

{l s="My Text In English" mod="elementsblocshome"}

Et lorsque je veux le traduire... et ben je ne trouve pas la section "elementsblocshome" dans "traduction des modules"... Et ça c'est deja plus embetant...

 

Je pense que c'est lié, que mon module n'est pas reconnu comme il le faut par prestashop.

 

Une idée ?

Link to comment
Share on other sites

Donc ça veut dire que si je veux accrocher un module à Homepage Content, je dois donc utiliser hookHome...

OUI

 

pourquoi tu veux utiliser hootTop ?

c'est pas moi qui veux, c'est prestashop, sinon ça marche pas

 

euh... tu es sûre que tu as bien lu et relu la doc ? A ta place je commencerais par faire le module "mymodule" : http://forge.prestashop.com:8081/pages/viewpage.action?pageId=3801216

Link to comment
Share on other sites

J'ai finalement reussi aussi bien pour mon css que pour mes traductions.

Effectivement le hookTop a bien été requis mais ce n'est pas dans la page que tu m'as donnée que c'etait indiqué :P

En fait mon module "elementsblocshome" est le "mymodule" du tuto que j'ai modifié, donc j'avais deja bien tout lu.

 

Mais en fait apres plusieurs tests j'ai compris qu'il fallait declarer le css dans le hookTop et le reste dans le hookHome

 

Mon code final donne ça, je l'ai renommé en "blocshome"et nettoyé pour que ce soit pus propre

 

class BlocsHome extends Module
{
public function __construct()
{
 $this->name = 'blocshome';
   $this->version = '1.0';
   $this->tab = 'front_office_features';
 $this->author = 'MoiMeme';
 $this->need_instance = 0;

 parent::__construct();

 $this->displayName = $this->l('Différents blocs pour la home');
 $this->description = $this->l('Permet de créer différents blocs dans la home');

}

public function install()
   {
    if (parent::install() == false OR $this->registerHook('home') == false)
 return false;
return true;
   }


public function hookTop($params)
{
  global $smarty;
  $smarty->assign(array());
  Tools::addCSS(($this->_path).'blocshome.css', 'all');
}
public function hookHome($params)
{
  global $smarty;
  $smarty->assign(array());
  return $this->display(__FILE__, 'blocshome.tpl');
}
}

 

Merci pour votre aide a tous

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