Comment faire un menu à la sauce Rails

Bonjour,

Je souhaiterai créer un menu de ce type :

  • Accueil
  • Page 2
  • Page 3
  • Page 4
Ce menu est affiché par le layout application.html.erb. La class="current" se place sur le menu current (bizarrement ?).

Je pourrai gérer le class=“current” en faisant plusieurs if dans la
view mais je suis persuadé qu’il y a une façon plus “Ruby” de le
faire.

Pouvez-vous m’orienter ?

Merci d’avance.
MF

Tu peux écrire les tags HTML en ruby, et mettre un ternaire pour
attribuer
la classe current, c’est comme ça que je ferais à ta place.

Le 28 juillet 2008 18:58, Morgan[email protected] a écrit :

Ce menu est affiché par le layout application.html.erb.


Michel B.

Salut,

il y a qq temps, il y a eu une discussion interessante sur le RailsWay
pour resoudre un probleme semblable:

http://www.therailsway.com/2007/6/4/free-for-all-tab-helper

Il faut s’accrocher par moments, mais c’est tres interessant!

Cyrille

On Jul 29, 5:32 am, “Michel B.” [email protected]

Merci d’avoir répondu !

Intéressant ça, je vais jeter un oeil dès que j’ai l’occasion.


Michel B.

Bonjour,

Si ça peut t’être utile j’ai développé un plugin pour gérer les menus :
http://blog.lachaise.org/?p=7

Je l’utilise dans toutes mes applis et il me simplifie bien la vie.


IciMarché fédère l’e-commerce de proximité
http://icimarche.fr

Intéressant ça, je vais jeter un oeil dès que j’ai l’occasion.
Si la doc sur mon blog ne suffit pas je compléterai à la demande :slight_smile:


IciMarché fédère l’e-commerce de proximité
http://icimarche.fr

Merci !
Ca a l’air suffisament clair, j’essayerai ce soir.

Votre blog est très interressant.

On 29 juil, 11:16, “philippe lachaise” [email protected]

Le 29 juillet 2008 10:07, philippe lachaise a écrit :

Si ça peut t’être utile j’ai développé un plugin pour gérer les menus :
http://blog.lachaise.org/?p=7

Je l’utilise dans toutes mes applis et il me simplifie bien la vie.

Je ne sais pas pour les autres colistiers, mais pour ma part,
j’ai écarquillé les yeux en voyant le code de :

http://miceplugins.lachaise.org/mice_menus/trunk/lib/mice_menus.rb

– Jean-François.


http://twitter.com/underflow_

2008/7/30 Jean-François Trân [email protected]:

http://miceplugins.lachaise.org/mice_menus/trunk/lib/mice_menus.rb

J’avoue que c’est verbeux :slight_smile:


Cyril M.

j’ai écarquillé les yeux en voyant le code de :
J’avoue que c’est verbeux :slight_smile:

Il y a longtemps que je n’ai plus regardé le code (ça fait le boulot,
c’est
le principe des plugins non ? :slight_smile:

Si qqun veut le fair maigrir il est bienvenu, ce qui compte c’est le DSL
pour régler la logique des menus, e.g. :

controller_menu! do
[
{ :only => [ :show, :new ], :label => ‘Pages’ , :title => ‘Pages du
mini-site de cette boutique’, :path => [ :shop_pages_path, { :shop_id =>
:current_shop }], :pict => ‘’ },
{ :only => :index , :label => ‘Ajouter une Page’ , :title => ‘Créer
un
nouveau pour ce magasin’, :path => [ :new_shop_page_path, :current_shop
],
:pict => ‘’ },
{ :only => :show , :label => ‘Modifier’ , :title => ‘modifier la
page’,
:path => [ :edit_shop_page_path, { :shop_id => :current_shop, :id =>
:@page
}], :pict => ‘’ },
{ :label => ‘Ressources’ , :title => ‘Gestion des ressources
(images,
video, sons) à insérer dans les pages du mini-site’, :path => [
:shop_assets_path, { :shop_id => :current_shop }], :pict => ‘’ },
{ :only => :show, :label => ‘Voir le site’ , :title => ‘Voir le
mini-site comme les visiteurs le voient’, :path => [ :user_spage_path, {
:user_id => :‘current_user.id’, :shop_id => :‘current_shop.id’ }], :pict
=>
‘’ },
{ :only => :index, :label => ‘Infos Magasin’ , :title =>
‘Informations
particulières à ce magasin’, :path => [ :shop_infos_path,
:current_shop],
:pict => ‘’ },
]
end


IciMarché fédère l’e-commerce de proximité
http://icimarche.fr

Le 28 juillet 2008 18:58, Morgan a écrit :

Ce menu est affiché par le layout application.html.erb.
La class=“current” se place sur le menu current (bizarrement ?).

Je pourrai gérer le class=“current” en faisant plusieurs if dans la
view mais je suis persuadé qu’il y a une façon plus “Ruby” de le
faire.

Pouvez-vous m’orienter ?

link_to_unless_current

et current_page?

sont tes amis.

– Jean-François.


http://twitter.com/underflow_

je ne comprends pas pourquoi il faut passer un tableau de hash à dans un
block, alors que les clés et valeurs des hashs 'ont l’air d’être que
des
symboles ou des chaînes de caractères

Tout simplement parce qu’ici on DECLARE les règles du jeu lors de la
définition de la classe du controlleur.
A ce moment là on ne peut pas évaluer un named-path ou quoi que ce soit
de
dynamique.

A l’exécution, :path => [ :shop_infos_path, :current_shop] veut par
exemple
dire

‘send( :shop_infos_path, :current_shop )’ soit la même chose que
‘shop_infos_path( current_shop )’

Si je réduis pour faite plus lisible :

controller_menu! do
[
{ :only => [ :show, :new ], :label => ‘Pages’ , :title =>
‘bla-bla’,
:path => [ :shop_pages_path, { :shop_id => :current_shop }] },
{ :only => :index, :label => ‘Infos Magasin’ , :title => ‘bla-bla’,
:path => [ :shop_infos_path, :current_shop] },
]
end

Au passage, :only => [ :show, :new ], veut dire : tu m’affiches ça que
pour
‘action = :show’ ou ‘action = :new’, etc.
(d’autres conditions peuvent être testés avec :if et :unless)

Dans beaucoup de codes “non verbeux” la même information est éparpillées
entre un nombre variablement abusif de controleurs, templates, partials,
etc. avec des <% if parms[controller] == ‘index’ %> <% else %> bla bla

Surtout qu’on voit souvent des menus très “informés” de la logique
applicative (M…VC !)

Bref, ne pas confondre dense et verbeux :wink:


IciMarché fédère l’e-commerce de proximité
http://icimarche.fr

Le 30 juillet 2008 18:13, philippe lachaise a écrit :

j’ai écarquillé les yeux en voyant le code de :
J’avoue que c’est verbeux :slight_smile:

Il y a longtemps que je n’ai plus regardé le code (ça fait le boulot, c’est
le principe des plugins non ? :slight_smile:

Si qqun veut le fair maigrir il est bienvenu, ce qui compte c’est le DSL

pas seulement, le code est important, le jour où il faut débuguer
et comprendre comment fonctionne les méthodes, les modules,
les classes proposés. Les tests aussi sont importants (mais bon,
passons)

{ :only => :show , :label => 'Modifier'  , :title => 'modifier la page',

particulières à ce magasin’, :path => [ :shop_infos_path, :current_shop],
:pict => ‘’ },
]
end

Quand on voit le DSL, il y a de quoi aussi écarquiller les yeux…

Mais comme je ne connais pas trop ce plugin, j’ai raté un épisode,
je ne comprends pas pourquoi il faut passer un tableau de hash à
dans un block, alors que les clés et valeurs des hashs n’ont l’air
d’être que des symboles ou des chaînes de caractères, donc
indépendant du scope où l’on se trouve… La réponse est peut-être
dans le code, mais bon…

– Jean-François.


http://twitter.com/underflow_