Pastie now auto-senses if line-wrap is a bad or good idea. Feedback?
## mark a section (Learn more)
## helper module FormHelper def render_tree_select(pages, name, control_id, control_name, current_selection, exclusion, blank_record) ret = '' ret += "<select name=\""+control_name+"\" id=\""+control_id+"\">" ret += "<option value=\"0\">"+blank_record+"</option>" if not blank_record.empty? for page in pages ret += "<option value=\"" + page.id.to_s + "\" " ret += "selected=\"selected\"" if current_selection == page.id ret += ">" ret += page[name] if page[name] ret += "</option>" ret += recurse_tree(page, 0, name, current_selection, exclusion) if page.children.size > 0 end ret += "</select>" end def recurse_tree(page, depth, name, current_selection, exclusion) depth = depth + 1 level = "- " * depth ret = '' if page.children.size > 0 page.children.each { |subpage| if subpage.id != exclusion if subpage.children.size > 0 ret += '<option value="'+subpage.id.to_s+'"' ret += "selected=\"selected\"" if current_selection == subpage.id ret += ">" ret += h(level + subpage[name]) ret += recurse_tree(subpage, depth, name, current_selection, exclusion) ret += '</option>' else ret += '<option value="'+subpage.id.to_s+'">' ret += h(level + subpage[name]) ret += '</option>' end end } ret += '' end end end ## view <%= render_tree_select(Page.find(:all, :conditions => ["parent_id = ? and id != ?", 0, @page.id], :order => :position), :title, 'page_parent_id', 'page[parent_id]', @page.parent_id, @page.id, 'Main page (no parent)') %>
This paste will be private.
From the Design Piracy series on my blog: