Jump to content

Récupérer id de catégorie dans header.tpl


fbarret
 Share

Recommended Posts

Bonjour,

 

J'ai besoin de récupérer l'id de la catégorie dans laquelle on se trouve, quelle que soit la page affichée, pour l'inscrire dans le fichier header.tpl.

 

Je suis un peu perdu avec smarty et l'organisation du moteur Prestashop.

 

Si un gentil développeur passe par là…

 

Merci,

 

François

Edited by fbarret (see edit history)

Share this post


Link to post
Share on other sites

Merci pour l'idée, mais ça ne marche pas dans header.tpl.

 

Je teste ceci qui a l'air de fonctionner à peu près comme je souhaite :

<body class="{if $currentCategoryId}{$currentCategoryId}{/if}">

 

Sauf qu'en fait j'aimerais bien pouvoir obtenir l'id de la catégorie de premier niveau (dans une sous-catégorie, c'est l'id de cette sous-catégorie qui sort).

Mais si je n'y parviens pas, je ferai avec ça…

Share this post


Link to post
Share on other sites

{$currentCategory} est défini dans le contrôleur. Tandis que {$smarty.get.id_category} est récupéré depuis l'url.

 

Bien que ton comportement actuel fonctionne bien, il serait logique de vérifier si la catégorie est valide dans ton contrôleur avant d'afficher le template.

Share this post


Link to post
Share on other sites

C'est là que je suis un peu perdu, je ne suis pas habitué aux moteurs de templates et je maîtrise mal la liaison entre les php, les tpl, les contrôleurs…

D'après ce que tu dis, avec {$currentCategory} je devrais placer un code supplémentaire dans le .tpl qui permettra de vérifier si la catégorie est valide (je n'ai pas encore trouvé comment on "vérifie un contrôleur") car ceci : {if $currentCategoryId}{$currentCategoryId}{/if} ne suffit pas ?

Ou je dois comprendre que {$smarty.get.id_category} est plus simple et plus sûr ?

Share this post


Link to post
Share on other sites

Non, la vérification devrait être faite dans le contrôleur et retourner une erreur si la catégorie n'est pas valide. Cette variable id_category vient de l'url donc n'importe qui peut la modifier simplement en la changeant dans la barre d'adresse.

 

C'est juste une question de logique en fait :

 

--> Ta requête arrive sur l'application

--> Contrôleur : id est valide ?

---> BDD trouve moi catégorie avec id = xxx

--> BDD n'a pas trouvé de catégorie avec id = xxx

--> Contrôleur : Retourne une erreur

--> BDD a trouvé catégorie avec id = xxx

--> Contrôleur : Passe la variable id_category au template

--> Contrôleur : afficher le template

--> Template : affiche moi la variable id_category

 

Schéma classique et simplifié MVC.

 

Je ne connais pas encore bien PS mais je bosse beaucoup avec d'autres frameworks. En analysant ton problème, je dirais que la variable id_category n'est pas encore disponible au niveau du header.

 

Et non, $smarty.get.id_category n'est pas mieux, que du contraire.

Share this post


Link to post
Share on other sites

Tu es sur quelle version de PS ?

 

La variable smarty $category dépend de ton contexte, si tu n'es pas dans une catégorie ou une fiche produit elle n'existe pas.

 

Sur la 1.5 cette variable est assignée dans CategoryController et ProductController dans la fonction initContent(). C'est à cet endroit des controleurs que tu peux passer tes variables PHP au moteur Smarty via la fonction

$this->context->smarty->assign(array('category' => $this->category))

Si tu es en 1.5 ou

$smarty->assign(array('category' => $this->category))

Si tu es en 1.4

 

Bien sûr tu te seras occupé de récupérer l'objet $this->category avant en utilisant les fonctions de la classe Category.

Edited by Garnaud (see edit history)

Share this post


Link to post
Share on other sites

@Christophe W

Merci pour ces indications. Il va me falloir un peu de temps pour bien digérer déjà ça et être capable de convertir les principes en code, mais ça va me faire avancer je pense.

 

@Garnaud

Je suis sur 1.4.8.2

Idem, merci beaucoup pour les indications. Je me doutait bien qu'une variable de catégorie n'était disponible que si on se trouve dans une arborescence de catégorie ;) mais mon souci est de la récupérer au niveau du fichier header.tpl.

 

Je vais bien y arriver mais je pensais que c'était déjà prévu de façon simple (ça me parait tellement indispensable pour le css ensuite !) sans avoir à faire du développement sur plusieurs fichiers.

J'ai trouvé {$currentCategory} qui semble faire ce que je veux (accessible depuis header.tpl directement) et je vais me contenter de ça pour le moment, en attendant de pouvoir finaliser ce code plus proprement... le site n'est qu'au début du développement.

Share this post


Link to post
Share on other sites

  • 2 weeks later...

Juste pour conclure : j'ai abandonné cette recherche sur la v.1.4.8.2 (et donc je ne tague pas en [RÉSOLU] puisque ce n'est pas le cas).

En passant, la variable $currentCategoryId n'est disponible que lorsqu'on est en mode développement, elle ne marche plus (dans header.tpl) en mode boutique active (cache activé etc.) - donc elle finit surtout par poser des problèmes, je ne vois pas son intérêt.

 

Ma solution a été de passer sur Prestashop 1.5.0.17. Là, la variable $category->id est directement disponible dans header.tpl (et c'est bien pratique ! :))

Share this post


Link to post
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
 Share

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More