fbarret Posted September 25, 2012 Share Posted September 25, 2012 (edited) 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 September 25, 2012 by fbarret (see edit history) Link to comment Share on other sites More sharing options...
Garnaud Posted September 25, 2012 Share Posted September 25, 2012 Tu peux le récupérer comme ceci : {$category->id} Pense juste à vérifier que la variable $category existe bien pour éviter les erreurs : {if isset($category)} {$category->id} {/if} Link to comment Share on other sites More sharing options...
fbarret Posted September 25, 2012 Author Share Posted September 25, 2012 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… Link to comment Share on other sites More sharing options...
coeos.pro Posted September 25, 2012 Share Posted September 25, 2012 si ça ne fonctionne pas c'est par ce qu'il n'est pas encore défini, dans ce cas tu es obligé de passer par get ($_GET) pour le récupérer, en smarty ça donne : {$smarty.get.id_category} Link to comment Share on other sites More sharing options...
fbarret Posted September 25, 2012 Author Share Posted September 25, 2012 (edited) Merci, ça marche impec. Mais au final je ne vois pas de différence entre {$currentCategoryId} et {$smarty.get.id_category}, le résultat semble identique. En tout cas merci pour l'aide à vous deux ! Edited September 25, 2012 by fbarret (see edit history) Link to comment Share on other sites More sharing options...
Christophe W. Posted September 26, 2012 Share Posted September 26, 2012 {$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. Link to comment Share on other sites More sharing options...
fbarret Posted September 26, 2012 Author Share Posted September 26, 2012 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 ? Link to comment Share on other sites More sharing options...
Christophe W. Posted September 26, 2012 Share Posted September 26, 2012 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. Link to comment Share on other sites More sharing options...
Christophe W. Posted September 26, 2012 Share Posted September 26, 2012 Maintenant tu peux créer un hookDisplayHeader qui sera appelé à chaque fois que le header s'affiche, et récupérer l'id de la catégorie dans ce hook. Link to comment Share on other sites More sharing options...
Garnaud Posted September 26, 2012 Share Posted September 26, 2012 (edited) 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 September 26, 2012 by Garnaud (see edit history) Link to comment Share on other sites More sharing options...
fbarret Posted September 26, 2012 Author Share Posted September 26, 2012 @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. Link to comment Share on other sites More sharing options...
fbarret Posted October 4, 2012 Author Share Posted October 4, 2012 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 ! ) Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now