Jump to content

Affichage conditionnel colonne de gauche selon categorie


Recommended Posts

Bonjour,

 

Est-il possible de cibler précisément les pages ou catégories sur lesquelles doivent s'afficher les modules de la colonne de gauche?

 

Dans la gestion des positions, seule l'exclusion d'une page semble possible...

 

Y-a-t'il une syntaxe particulière ou un guide de référence sur ce sujet?

 

Merci,

C.

Link to comment
Share on other sites

Personne n'a jamais rencontré ce problème???

 

Tout le monde utilise la sidebar pour afficher invariablement les mêmes informations sur toutes les pages? Cela m'étonne énormément de la part d'un CMS si avancé par ailleurs.

 

Est-ce que j'ai loupé quelque chose?

Link to comment
Share on other sites

  • 2 weeks later...

Salut.

 

J'ai du mal à comprendre votre demande :

- Souhaitez-vous faire apparaitre / disparaitre des block dans les colonnes en fonction de la page ?

- Souhaitez-vous changer la position d'un block dans les colonnes en fonction de la page ?

 

Dans le premier cas, c'est assez facile :

- vous pouvez détecter la page appelée grâce à une fonction : __FILE__ combiné avec la fonction basename de PHP.

- avec une condition, vous envoyez les informations souhaités. Exemple pour un hookLeftColumn :

public function hookLeftColumn($params)
{
$page = basename(__FILE__);
if ($page == 'category.php')
return $this->display(__FILE__, 'mytemplate1.tpl');
if ($page == 'product.php')
return $this->display(__FILE__, 'mytemplate2.tpl');
if ($page == 'index.php')
return $this->display(__FILE__, 'mytemplate3.tpl');
}

- vous pouvez faire pareil avec les balises smarty :

{if ($smarty.const.__FILE__|basename == 'category.php')}
<div>Toto 1</div>
{/if}
{if ($smarty.const.__FILE__|basename == 'product.php')}
<div>Toto 2</div>
{/if}
{if ($smarty.const.__FILE__|basename == 'index.php')}
<div>Toto 3</div>
{/if}

 

Dans le second cas, je ne sais pas vraiment comment faire, mais ça doit être facilement possible étant donné qu'on peut le faire dans le liveEdit, mais il faut gérer pas mal de truc. M'enfin, ça reste bien chiant et je trouve ça vraiment inutile.. donc je chercherai pas vraiment plus loin, je vous ai donné pas mal d'informations ;)

 

PS: C'est vraiment de l'arnaque de faire payer les gens 30€ pour un module si simple à réaliser....

Link to comment
Share on other sites

merci pour ton intervention, Sbizz. Je vais pouvoir commencer avec ça.

En fait, le contenu des pages change suivant les catégories chez moi. Enfin j'essaie.

- des blocs contenu "tout simple" changent,

- l'accueil des catégories aussi : sliders différents, blocs qui normalement sont en home...(pour ça je pensais faire des hooks que j'appelle suivant la catégorie" mais je vais étudier ta solution aussi.)

 

Mais ce que je n'ai pas encore réussi à faire c'est faire changer le bloc "catégorie" (colonne de gauche). Je voudrais qu'il affiche seulement la catégorie qu'on est en train de visiter. (avec ses sous catégories).

J'ai trouvé pas mal de questions sur le forum mais jamais de solutions complètes, juste des pistes.

 

Si quelqu'un sait...

 

(sur presta 1.4.4)

Link to comment
Share on other sites

Mais ce que je n'ai pas encore réussi à faire c'est faire changer le bloc "catégorie" (colonne de gauche). Je voudrais qu'il affiche seulement la catégorie qu'on est en train de visiter. (avec ses sous catégories).

 

C'est la solution dont je parle plus haut, sauf qu'au lieu de voir seulement la page PHP, vous regardez aussi l'existence et la valeur de la variable GET "id_product".

 

D'ailleurs, si c'est SEULEMENT le nom de la catégorie, une simple requête suffit...

 

(fait à l'arrache, possibilité d'erreurs) :

public function hookLeftColumn($params)
{
global $smarty;
// On recupere l'id de la categorie
$id_category = (int)Tools::getValue('id_category');
$category = null;
// On execute la requete que si on est sur la page des categories et si la categorie est valide
if (basename(__FILE__) == 'category.php' AND $id_category > 0)
{
// On recupere le nom de la categorie
$category = Db::getInstance()->getRow('SELECT cl.`name` FROM `' . _DB_PREFIX_ . 'category_lang` cl WHERE id_category = ' . (int)$id_category);
}
// On verifie qu'on a récuperé une categorie, sinon on dit qu'elle est inconnue
$category (($category['name']) ? ($category['name']) : ('Inconnue'));
// On assigne à smarty
$smarty->assign('category_name', $category['name']);
// On affiche le template
$this->display(__FILE__, 'templateLeftColumn.tpl');
}

 

Et tu récupères donc le nom {$category_name} dans ton template..

Link to comment
Share on other sites

Voilà des idées bien pratiques ! Il y a de quoi faire pas mal de choses déjà avec ça.

Ca fonctionne à l'inverse des exceptions dans le positionnement des modules : on choisit ou on veut que ça marche.

Merci, je vais pouvoir avancer avec ça.

Link to comment
Share on other sites

Que veux-tu faire exactement ?

 

Le code que je viens de donner, c'est pour créer un module, qui va afficher un block (ou des informations) en fonction de la catégorie si tu te trouves sur la page category.php (donc sur une catégorie).

Link to comment
Share on other sites

oki merci, car je finissait a ne plus rien comprendre...

Non je voudrais que le block categories n' affiche seulement la catégorie qu'on est en train de visiter avec ses sous catégories.. J'ai bien trouver un topic sur le forum ,ici, mais j'utilise la derniere version de prestashop 1.4.6 et ça ne fonctionne pas, j'ai regardé le code des fichiers du block mais je ne vois pas ou je dois modifier. merci pour ta réponse rapide, je vais continuer de chercher. bonne journée

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