Hello list,
I''m trying to render a tree using the following helper function (added
it to
ApplicationHelper):
def display_tree_recursive(tree, parent_id)
  ret = "<ul>"
  tree.each do |node|
    if node.parent_id == parent_id
      ret += "<li style=\"list-style:none;\">"
      ret += yield node
      ret += display_tree_recursive(tree, node.id) { |n| yield n }
      ret += "</li>"
    end
  end
  ret += "</ul>"
end
In my view, I''ve got the following Erb code:
 <%    display_tree_recursive(@categories,0) do |node|
        if node.parent_id == 0
           "<b>" + node.name + "</b>"
        else
            pos = 20 if node.parent_id == 0;
            pos = node.parent_id+20 if node.parent_id != 0;
             "<span
style=\"position:relative;right:#{pos}p\">#{node.name
}</span>"
        end
    end
   %>
Of course I''m going nowhere with this logic and that''s why
I''d like to know
of an easy and effective way to render a tree hierachically, in a way that a
child get more to the right than its parent. Is there any helper available
for this?
Thanks.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---
Hi Marcelo
def list_tree(tree, level = 0, &block)
  content = tree.children.inject '''' do |mem, node|
    mem + block[node, level] + list_tree(node, level + 1, &block)
  end
  content_tag :ul, content_tag(:li, content),
    :class => "#{tree.class.name.tableize}_#{level}"
end
<%
list_tree @tree do |node, level|
  content_tag("h#{level}", node.name) + content_tag(:p, node.text)
end
%>
Regards
Florian
PS: untested...
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---
Thanks Florian... actually I''ve used the following code and it is
working
nicely, I will try you code though and let you know how it worked :)
       def display_tree_recursive(tree, parent_id)
  ret = "<ul>"
  tree.each do |node|
    if node.parent_id == parent_id
      if (node.parent_id == 0)
        classe = "root_node"
      else
        classe = "sub_node"
      end
      ret += "<li class=\"#{classe}\">"
      ret += "<span class=\"#{classe}\">"
      ret +=  link_to node.name, {:controller => "documents",
:action =>
"list", :id => node.id}
      ret += display_tree_recursive(tree, node.id) { |n| yield n }
      ret += "</span>"
      ret += "</li>"
    end
  end
  ret += "</ul>"
end
The CSS'' classes used:
.root_node {
    font-size:14px;
    font-weight:bolder;
    list-style:none;
}
.sub_node {
    font-size:14px;
    text-indent:0px;
    left:15px;
    font-weight:normal;
    position:relative;
    list-style-position:inherit;
}
Thanks!
Marcelo.
On 8/29/07, Florian Aßmann <florian.assmann-htSm2yLGOjU@public.gmane.org>
wrote:>
>
> Hi Marcelo
>
> def list_tree(tree, level = 0, &block)
>   content = tree.children.inject '''' do |mem, node|
>     mem + block[node, level] + list_tree(node, level + 1, &block)
>   end
>
>   content_tag :ul, content_tag(:li, content),
>     :class => "#{tree.class.name.tableize}_#{level}"
> end
>
> <%>
> list_tree @tree do |node, level|
>   content_tag("h#{level}", node.name) + content_tag(:p,
node.text)
> end
>
> %>
>
> Regards
> Florian
>
> PS: untested...
>
> >
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---