Modification du comportement de link_to dans une installation de Redmine (Ruby on Rails)
-
21-08-2019 - |
Question
Je suis en train de modifier l'interface utilisateur d'une installation de Redmine (Redmine 0.7.3.devel.2093 (MySQL)).
Lorsque vous affichez un projet dans Redmine, il génère une liste de tous les sous-projets du projet.
Par exemple, app / views / projets / index.rhtml appelle link_to fonction:
<% if @project_tree[project].any? %>
<p><%= l(:label_subproject_plural) %>:
<%= @project_tree[project].sort.collect {|subproject|
link_to(h(subproject.name), {:action => 'show', :id => subproject}, :class => (User.current.member_of?(subproject) ? "subp fav" : "subp"))}.join(', ') %></p>
<% end %>
Quels sont sorties le code HTML suivant:
<p>Subprojects:
<a href="/projects/show/foo" class="subp fav">Foo Subproject</a>, <a href="/projects/show/bar" class="subp">Bar Subproject</a>, <a href="/projects/show/baz" class="subp fav">Baz Subproject</a></p>
Nous trouvons qu'une liste délimitée par des virgules des sous-projets est très difficile à analyser visuellement. Nous aimerions avoir chaque sous-projet inscrit sur sa propre ligne. (Tout balisage est très bien -. UL, OL, ou balises P sur chaque lien serait idéal, mais un BR à la place d'une virgule serait tout à fait bien)
Quelle est la meilleure façon de faire ce changement? Je ne peux pas trouver où link_to
est défini dans l'application; grep def link_to(
et similaires se présente rien. Je suis un type d'interface utilisateur, donc je ne comprends pas vraiment comment Rails traite de ce genre de choses - il ne semble pas être défini dans les modèles de vue.
La solution
Vous pouvez le faire directement dans le code que vous avez fourni. Il suffit de changer
join(', ')
à
join('<br />')
Cela devrait le faire.
Autres conseils
link_to est fourni par le framework Rails - il ne génère pas les liens comme une liste - il crée simplement un seul lien. La question est la sort.collect et le bloc générant les appels à link_to
Cela devrait fonctionner, mettre les sous-projets dans les éléments de liste
<% @project_tree[project].sort.collect do |subproject| %>
<li>
<%= link_to(h(subproject.name), {:action => 'show', :id => subproject}, :class => (User.current.member_of?(subproject) ? "subp fav" : "subp")) %>
</li>
<% end %>
Je voulais souligner que la dernière version du tronc Redmine a changé le projet d'utiliser la liste des listes HTML (ul et li).