Witam serdecznie. Mam zaprojektowane menu z ktorym wrecz nie moge sobie poradzic.
Oto helper w ktorym jest zdefiniowane menu. miedzy innymi. Jak moge go rpzerobic aby artykuly pokazywaly sie w kolejnosci od najwiekszej do najmniejszej czyli tak jakby po dodaniu :order =>“id DESC”. Sek w tym ze nie wiem gdzie i w jaki sposob to dodac
[code=ruby] # menu
odpala metode url_for_xxx dla kazdego elementu w tablicodrzewie nazw, odpowiednio dla typu obiektu xxx
lub uzupelnia pole url urlem z przekierowania jesli aktywne przekierowanie
struktura tablicy => patrz modele: category, article, metoda names_tree_array
def set_object_urls! arr
arr.each do |item|
item[:url] = self.method(‘url_for_’+item[:type]).call(item[:obj])
set_object_urls! item[:sub]
end
end
wyswietlenie konkretnego menu w miejscu wywolania. kind to :articles albo :shop, objtype - typ(z configu) artykulu
dodatkowe opcje dla niektorych typow menu w opts (patrz komentarze przy realizacjach konkretnych menu ponizej)
menu sklepu jest cacheowane
def show_menu kind, objtype, opts = {}
if kind == :shop
mv = Cache.find_by_key “shop_menu”
if mv.nil?
v = generate_menu kind, objtype, opts
Cache.create :key => “shop_menu”, :value => v
return v
else
return mv.value
end
else
return generate_menu kind, objtype, opts
end
end
def generate_menu kind, objtype, opts
case kind
when :articles
menuconf = @config[‘arttypes’][objtype][:menu]
if opts[:only_additional_left]
arr = Article.names_tree_array_only_additional_left objtype, @lang
else
arr = Article.names_tree_array objtype, @lang
end
when :shop
menuconf = @config[‘shop_menu’]
arr = Category.names_tree_array @lang
end
set_object_urls! arr
case menuconf[:type]
when :dropdown
show_xmenu2 arr, menuconf, opts
when :block
show_blockmenu arr, menuconf, opts
when :tree
show_treemenu arr, menuconf, opts
end
end
def show_menu_additional_left objtype, parent, opts
arr = Article.names_tree_array_only_additional_left objtype, @lang, parent
menuconf = @config[‘arttypes’][‘poziom’][:menu]
set_object_urls! arr
#show_xmenu2 arr, menuconf, {}
show_blockmenu arr, menuconf, opts
#show_treemenu arr, menuconf, {}
end
#xmenu2
def show_xmenu2 arr, conf, opts
ret = "\n”
else
ret += run_blockmenu conf
end
end
def run_blockmenu conf
ret = “\n”
return ret
end
def subblock arr, level, conf, opts
ret = “”
dtpre = opts[“dt#{level}prefix”]
ddpre = opts[“dd#{level}prefix”]
dtpost = opts[“dt#{level}postfix”]
ddpost = opts[“dd#{level}postfix”]
dtpre ||= opts[“dtprefix”]
ddpre ||= opts[“ddprefix”]
dtpost ||= opts[“dtpostfix”]
ddpost ||= opts[“ddpostfix”]
dtpre ||= “”
ddpre ||= “”
dtpost ||= “”
ddpost ||= “”
arr.each do |item|
if !item[:sub].empty? && !conf[:nodes_active]
ret += "<li id='block_#{item[:obj].id}'>#{dtpre} #{h item[:obj].name}#{dtpost}</li>"
else
ret += "<div id='pierwszy#{item[:obj].id}' style=\"display: none;\">
<ul><li id='block_#{item[:obj].id}'>#{dtpre} <span class=\"naglowek2\"> #{link_to item[:name], item[:url]}</span> #{dtpost}
<br />
<a href=\"#\" onclick=\"document.getElementById('drugi#{item[:obj].id}').style.display='block'; document.getElementById('pierwszy#{item[:obj].id}').style.display='none'\">
#{
if @lang == 'pl'
@ukryj = 'Ukryj... ';
else
@ukryj = 'Hide...';
end
}
</a>
<br /> #{item[:obj].content} </li><br />
</ul>
</div>
<div id='drugi#{item[:obj].id}' >
<ul><li id='block_#{item[:obj].id}'>#{dtpre} <span class=\"naglowek2\"> #{link_to item[:name], item[:url]}</span> #{dtpost}
<br />
<a href=\"#\" onclick=\"document.getElementById('pierwszy#{item[:obj].id}').style.display='block'; document.getElementById('drugi#{item[:obj].id}').style.display='none';\">
#{
if @lang == 'pl'
@ukryj = 'Więcej... ';
else
@ukryj = 'More...';
end
}
</a>
<br /> #{item[:obj].trailer} </li><br />
</ul>
</div>"
end
end
return ret
end[/code]
Sa tu 2 menu poziome i pionowe. Mnie interesuje pionowe albo oba ;p
Dziekuje za pomoc.