Bondaty and Co Posted September 19, 2016 Share Posted September 19, 2016 Bonjour, Est ce quelqu'un a la solution concernant le problème récurrent du topmenu concernant les liens actifs. Ce module est en fonction depuis des années et le problème est toujours là: lorsque vous créez un lien dans le menu, la class active ne fonctionne pas, elle fonctionne uniquement pour les catégories et cms. Les divers solutions sur le forum ne fonctionnent pas avec la version 2.2.4 du module sur un presta 1.6.1.7 Merci Christophe Link to comment Share on other sites More sharing options...
doekia Posted September 19, 2016 Share Posted September 19, 2016 Qu'entends tu par classe active et lien dans le menu? Link to comment Share on other sites More sharing options...
Bondaty and Co Posted September 19, 2016 Author Share Posted September 19, 2016 salut, .sfHoverForce fait office de pseudo class active, mais ne s'applique pas sur les liens créés en BO du module. Uniquement sur les catégories et cms Link to comment Share on other sites More sharing options...
doekia Posted September 19, 2016 Share Posted September 19, 2016 Normal prestashop n'a aucun vrai moyen de base de savoir que tu es sur le lien ... A toi de comparer dans le tpl que le request match ton lien et dans ce cas d'ajouter la classe Link to comment Share on other sites More sharing options...
Bondaty and Co Posted September 19, 2016 Author Share Posted September 19, 2016 J'ai tourner le truc dans tous les sens et pour le moment rien Link to comment Share on other sites More sharing options...
doekia Posted September 19, 2016 Share Posted September 19, 2016 ? tu n'arrives pas a comparer le REQUEST_URI et ton lien pour mettre la bonne classe ? C'est bien ça le problème? Link to comment Share on other sites More sharing options...
Bondaty and Co Posted September 19, 2016 Author Share Posted September 19, 2016 Effectivement, tout ce passe ici : case 'LNK': $link = MenuTopLinks::get((int)$id, (int)$id_lang, (int)$id_shop); if (count($link)) { if (!isset($link[0]['label']) || ($link[0]['label'] == '')) { $default_language = Configuration::get('PS_LANG_DEFAULT'); $link = MenuTopLinks::get($link[0]['id_linksmenutop'], $default_language, (int)Shop::getContextShopID()); } $this->_menu .= '<li><a href="'.Tools::HtmlEntitiesUTF8($link[0]['link']).'"'.(($link[0]['new_window']) ? ' onclick="return !window.open(this.href);"': '').' title="'.Tools::safeOutput($link[0]['label']).'">'.Tools::safeOutput($link[0]['label']).'</a></li>'.PHP_EOL; } break; Link to comment Share on other sites More sharing options...
Bondaty and Co Posted September 19, 2016 Author Share Posted September 19, 2016 Voici mes modifs, le problèmes est qu'il réactualiser la page pour pour avoir le résultat escompté. Le lien accueil n'est pas activé en arrivant sur le site case 'LNK': $link = MenuTopLinks::get((int)$id, (int)$id_lang, (int)$id_shop); if (count($link)) { if (!isset($link[0]['label']) || ($link[0]['label'] == '')) { $default_language = Configuration::get('PS_LANG_DEFAULT'); $link = MenuTopLinks::get($link[0]['id_linksmenutop'], $default_language, (int)Shop::getContextShopID()); } $selected = (Tools::HtmlEntitiesUTF8($link[0]['link']) == $_SERVER['HTTP_REFERER']) ? ' class="sfHoverForce"' : ''; $this->_menu .= '<li' .$selected.'><a href="'.Tools::HtmlEntitiesUTF8($link[0]['link']).'"'.(($link[0]['new_window']) ? ' onclick="return !window.open(this.href);"': '').' title="'.Tools::safeOutput($link[0]['label']).'">'.Tools::safeOutput($link[0]['label']).'</a></li>'.PHP_EOL; } break; Link to comment Share on other sites More sharing options...
doekia Posted September 19, 2016 Share Posted September 19, 2016 Là n'est pas la question. On a tous nos faiblesses, l'important n'est pas de me la péter, c'est de satisfaire mes clients. C'est quand même php 101 http://php.net/manual/fr/control-structures.if.php http://php.net/manual/fr/language.operators.comparison.php#language.operators.comparison.ternary Link to comment Share on other sites More sharing options...
Bondaty and Co Posted September 19, 2016 Author Share Posted September 19, 2016 Une agence de com se n'est uniquement du dev, il y a beaucoup d'autre facteurs qui entrent en jeux.Alors il est vrai que je ne suis loin d'être un puriste du codage, mais lorsque que je livre un site, il fonctionne. Bien entendu je passe surement beaucoup plus de temps que vous à trouver les solutions, mais je fini par les trouver et mes clients sont satisfaits.Maintenant, si vous souhaitez m'aidez, vous pouvez se sera avec grand plaisir. Après si celà vous amuse d'éplucher mon activité et tout ce qui s'en suit, vous pouvez., Mes clients savent qui je suis, mes capacités et mes compétences. Il viennent pas chez moi pour avoir un développeur, mais pour avoir un prestataire qui sera capable de comprendre ce qu'ils souhaitent et de les satisfaire. Donc si vous avez la solution et souhaitez la partager avec moi et les autres membres de la communauté, le post est ouvert.Dans le cas contraire Merci de laisser la place aux autres. Christophe Link to comment Share on other sites More sharing options...
Bondaty and Co Posted September 19, 2016 Author Share Posted September 19, 2016 La condition est bien en place, le problème est juste qu'il faut cliquer 2 fois sur le lien pour qu'elle reste et je n'arrive pas à comprendre pourquoi ? case 'LNK': $link = MenuTopLinks::get((int)$id, (int)$id_lang, (int)$id_shop); if (count($link)) { if (!isset($link[0]['label']) || ($link[0]['label'] == '')) { $default_language = Configuration::get('PS_LANG_DEFAULT'); $link = MenuTopLinks::get($link[0]['id_linksmenutop'], $default_language, (int)Shop::getContextShopID()); } $this->_menu .= '<li '.($_SERVER['HTTP_REFERER'] == (Tools::HtmlEntitiesUTF8($link[0]['link'])) ? 'class="sfHover"' : '').'><a href="'.Tools::HtmlEntitiesUTF8($link[0]['link']).'"'.(($link[0]['new_window']) ? ' onclick="return !window.open(this.href);"': '').' title="'.Tools::safeOutput($link[0]['label']).'">'.Tools::safeOutput($link[0]['label']).'</a></li>'.PHP_EOL; } break; Link to comment Share on other sites More sharing options...
doekia Posted September 19, 2016 Share Posted September 19, 2016 Ben oui car là c'est le fondamental du http. Le REFERER c'est la page dont tu viens pas la page où tu arrives (sauf quand tu "cliques" 2x). J'ai beau relire je ne vois pas où j'aurais parlé de REFERER Link to comment Share on other sites More sharing options...
Bondaty and Co Posted September 19, 2016 Author Share Posted September 19, 2016 (edited) Pour ceux que cela intéressent, voici la solution à remplacer vers la ligne 561 du blocktopmenu.php (le mieux est de faire un override).lorsque vous créez vos liens personnalisés ne mettez pas l'url complète, par exemple pour la page d'accueil : /pour les autres pages : /ma-page case 'LNK': $link = MenuTopLinks::get((int)$id, (int)$id_lang, (int)$id_shop); if (count($link)) { if (!isset($link[0]['label']) || ($link[0]['label'] == '')) { $default_language = Configuration::get('PS_LANG_DEFAULT'); $link = MenuTopLinks::get($link[0]['id_linksmenutop'], $default_language, (int)Shop::getContextShopID()); } $this->_menu .= '<li '.($_SERVER['REQUEST_URI'] == (Tools::HtmlEntitiesUTF8($link[0]['link'])) ? 'class="sfHover"' : '').'><a href="'.Tools::HtmlEntitiesUTF8($link[0]['link']).'"'.(($link[0]['new_window']) ? ' onclick="return !window.open(this.href);"': '').' title="'.Tools::safeOutput($link[0]['label']).'">'.Tools::safeOutput($link[0]['label']).'</a></li>'.PHP_EOL; } break; Pour les gens bien sympathiques que j'ai eu la chance de rencontrer ce jour, en fait j'ai même rien à dire.Ce qui est sur c'est que si j'ai à faire travailler un développeur sur des sujets très spécifiques, je sais au moins où je n'irais pas. A bientôt Christophe Edited September 19, 2016 by Bondaty and Co (see edit history) Link to comment Share on other sites More sharing options...
Recommended Posts