maxhome Posted February 16, 2010 Share Posted February 16, 2010 Bonjour, bon je vais essayer d'être clair dans l'exposé de mon petit problème.J'ai un menu en dhtml dans le header qui liste toutes les catégories et pour chacune les sous-catégories associées.Si je clique sur une catégorie, l'effet "selected" du bouton de ma catégorie s'active (Donc css associé->bouton enfoncé)Si je clique sur une sous-catégorie, idem, le bouton de la catégorie principale reste actif...Mon problème est lorsque je clique sur un produit, par exemple depuis les produits phares, là le menu ne détecte pas l'id de la catégorie de mon produit, donc l'effet selected du menu, bien évidemment ne fonctionne pas.Ma question arrive: mon menu, comme beaucoup d'autres, tient compte de l'url qui est appelée du style:category.php?id_category=19Mais quand je clique sur un produit directement:product.php?id_product=169 ne renseigne pas l'url donc l'effet selected du menu ne fonctionne pas...Alors aux pros, avez-vous été confronté à un problème similaire et dans l'affirmative comment l'avez-vous réglé?Merci beaucoup Link to comment Share on other sites More sharing options...
Atch Posted February 17, 2010 Share Posted February 17, 2010 Salut Maxhome,Cette problématique c'est posée également sur un menu que je viens de réaliser pour un de mes templates.Avec l'aide de Sotew et yoya, nous avons réussi à parer ce petit défaut.Pour cela il te faut éditer le fichier blockcategories.php et ajouter ces quelques lignes : $currentCategoryId=0; if (isset($_GET['id_category'])) { $cat = new Category($_GET['id_category'], null); $parents = $cat->getParentsCategories(); $currentCategoryId = $parents[sizeof($parents)-1]['id_category']; $cookie->last_visited_category = intval($_GET['id_category']); //$smarty->assign('currentCategoryId', intval($_GET['id_category'])); } if (isset($_GET['id_product'])) { if (!isset($cookie->last_visited_category) OR !Product::idIsOnCategoryId(intval($_GET['id_product']), array('0' => array('id_category' => $cookie->last_visited_category)))) { $product = new Product(intval($_GET['id_product'])); if (isset($product) AND Validate::isLoadedObject($product)) $cookie->last_visited_category = intval($product->id_category_default); } $cat = new Category($cookie->last_visited_category, null); $parents = $cat->getParentsCategories(); $currentCategoryId = $parents[sizeof($parents)-1]['id_category']; //$smarty->assign('currentCategoryId', intval($cookie->last_visited_category)); } $smarty->assign('currentCategoryId', $currentCategoryId); $smarty->assign('blockCategTree', $blockCategTree); en lieu et place de : if (isset($_GET['id_category'])) { $cookie->last_visited_category = intval($_GET['id_category']); $smarty->assign('currentCategoryId', intval($_GET['id_category'])); } if (isset($_GET['id_product'])) { if (!isset($cookie->last_visited_category) OR !Product::idIsOnCategoryId(intval($_GET['id_product']), array('0' => array('id_category' => $cookie->last_visited_category)))) { $product = new Product(intval($_GET['id_product'])); if (isset($product) AND Validate::isLoadedObject($product)) $cookie->last_visited_category = intval($product->id_category_default); } $smarty->assign('currentCategoryId', intval($cookie->last_visited_category)); } $smarty->assign('blockCategTree', $blockCategTree); On a ajouté la fonction "getParentsCategories"...Bonne continuation.V++Atch Link to comment Share on other sites More sharing options...
maxhome Posted February 17, 2010 Author Share Posted February 17, 2010 Bonjour Atch et merci de t'interesser à mon cas...Pour moi pas bon, par contre j'ai oublié de te préciser que le menu que j'avais fait était en dur, fait à la main, c'est à dire qu'il ne reprend pas automatiquement le nom des catégories et sous-catégories dans la BDD; c'est moi qui les ai saisi... (Nom+URL du style category.php?id_category=2)...Je tenais à préciser car tu n'as peut-être pas tous les éléments Link to comment Share on other sites More sharing options...
SotEW Posted February 17, 2010 Share Posted February 17, 2010 Pourquoi t'es tu "résigné" à faire cette modification "en dur" ? pour avoir la bonne catégorie principale ?Dans tous les cas, ça ne change rien à l'affaire, si tu as l'id_product, tu peux obtenir sa catégorie principale avec ces 3 lignes : $cat = new Category($cookie->last_visited_category, null); $parents = $cat->getParentsCategories(); $currentCategoryId = $parents[sizeof($parents)-1]['id_category']; La première récupère la dernière catégorie visitée dans les cookies (Méthode utilisée dans le menu blockcategories de base. Dans la navigation de l'utilisateur sur le site, ça correspond à la catégorie du produit, tu peux voir dans le code fourni par atch l'affectation de la variable en question)La seconde ligne réccupère la liste de toutes les catégories parents jusqu'à arriver au home (exclus de la liste). on a donc la liste des catégories par ordre de profondeur inverse.La troisième ligne affecte la variable $currentCategoryId à la dernière ligne de la liste précédent, soit la catégory principale du produit.Cette variable, tu en fais ensuite ce que tu veux pour que ton TPL selectionne la catégorie correspondante, comme tu le fais avec ta liste "en dur" Link to comment Share on other sites More sharing options...
Atch Posted February 17, 2010 Share Posted February 17, 2010 Trop fort SotEW!!!Atch Link to comment Share on other sites More sharing options...
SotEW Posted February 17, 2010 Share Posted February 17, 2010 Atch, ces trois lignes elle sont dans ton code, t'as deux semaines de retard, là ^^ Link to comment Share on other sites More sharing options...
Atch Posted February 17, 2010 Share Posted February 17, 2010 lol...J'avais envi de dire que tu étais trop fort...Atch Link to comment Share on other sites More sharing options...
maxhome Posted February 17, 2010 Author Share Posted February 17, 2010 Vous êtes trop forts tous les 2: il me reste à tester et/ou adapter thanks 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