JeuWeb - Crée ton jeu par navigateur
[Rails] Menu et éléments actifs - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [Rails] Menu et éléments actifs (/showthread.php?tid=5880)



[Rails] Menu et éléments actifs - Viciousity - 30-12-2011

Bonjour à tous et à toutes, cela faisait pas mal de temps que je n'avais pas posté.
Je vous propose donc aujourd'hui, pour les utilisateur de Rails, un petit script qui va vous permettre d'ajouter une classe a un lien, si celui-ci est actif ou pas.

Helper:

module ApplicationHelper
def current_link_for label, path, options={}
options.update(:class => current_page?(path) ? "active" : nil)
link_to label, path, options
end
end

Vue:

<%= current_link_for "Accueil", root_path %>

à bientôt.

ps: Ce script est facilement adaptable pour d'autre framework.


RE: [rails] Menu et éléments actifs. - Sephi-Chan - 30-12-2011

Je vois trois gros défauts dans ton implémentation :
  • Le nom est mauvais. Il n'est pas révélateur du rôle de la méthode.
  • L'utilisation de update altère le hash d'options (pénible si le développeur souhaite le réutiliser). Mieux vaut utiliser merge.
  • Si l'utilisateur fournit déjà une classe, elle est écrasée.

Je partirais plutôt sur :


def some_better_name(label, path, options = {})
classNames = (options[:class] || '') << (current_page?(path) ? ' active' : '')
options = options.merge(class: classNames)

link_to(label, path, options)
end


Aucun nom ne me vient à l'esprit en y réfléchissant rapidement. Pour moi c'est révélateur du peu d'intérêt de la méthode.

J'écrirais donc manuellement :


link_to("Home", root_path, class: current_page?(root_path) && :active)

Ou sinon je me ferais des helpers au cas par cas. C'est bien suffisant dans la mesure où ce besoin est plutôt limité (généralement c'est pour un menu de navigation) et qu'en général, les conditions pour indiquer qu'on est dans une section sont potentiellement plus complexes que la correspondance exacte du chemin.

Par exemple si je fais un lien vers la section "Aide" dans mon menu de navigation, le lien sera mis en évidence quelle que soit la page d'aide sur laquelle je me trouve (/help, /help/pricing, /help/bugs, /help/bugs/42, etc.).



RE: [Rails] Menu et éléments actifs - niahoo - 30-12-2011

perso pour moi ça tient uniquement de la vue vue que ce n'est que cosmétique sur le lien


a[href^=http://www.blabla.com/ma/page/en/cours] {
color: moche;
font: petit;
déco: none;
}



RE: [Rails] Menu et éléments actifs - Sephi-Chan - 30-12-2011

Ce n'est pas forcément cosmétique, ça peut être sémantique.

Intégrer ça dans le CSS n'est pas envisageable selon moi dans la mesure où ça concerne souvent un ensemble de page qui appartiennent à un même groupe plus qu'une page esseulée. Wink

C'est pour ça que je suggère le cas par cas, en fourrant ça dans un helper pour garder un code propre (en cachant ce qui n'est pas intéressant).


RE: [Rails] Menu et éléments actifs - Viciousity - 31-12-2011

Merci Sephi,

C'est marrant parce que le nom, j'ai pas mal planché dessus et je vois pas ce que je pourrais mettre d'autre...

Maintenant il est clair que cet helper est spécifique à ma manière de coder. Je suis fort sémantique et beaucoup se passe dans le CSS. Je n'avais besoin que de la classe 'active', je n'ai donc pas forcement pensé plus loin (surcharge du hasch de classe).

Maintenant il est clair que ça marche pour des pages statiques et unique mais que ce n'est clairement pas adapté au ressources ou autres...

Merci pour tes remarques.

link_to("Home", root_path, class: current_page?(root_path) && :active)
C'est marrant j'avais exactement cela avant mais devoir répéter le code pour 7 liens je trouvais ça chiant en terme de maintenabilité ^^)