Modifications for menu in Design

This commit is contained in:
chris2tof 2011-09-01 09:12:41 +08:00
parent 98d6c3fa15
commit 492f691469
7 changed files with 61 additions and 1 deletions

View File

@ -12,7 +12,7 @@ class Admin::ItemsController < ApplicationController
if params[:item_id] if params[:item_id]
@item = Item.find(params[:item_id]) @item = Item.find(params[:item_id])
else else
@item = Item.first(:conditions => {:parent_id => nil}) @item = get_homepage
end end
end end

View File

@ -74,4 +74,8 @@ class ApplicationController < ActionController::Base
end end
end end
def get_homepage
Item.first(:conditions => {:parent_id => nil})
end
end end

View File

@ -1,5 +1,6 @@
class DesignFile class DesignFile
include Mongoid::Document include Mongoid::Document
include Mongoid::Timestamps
mount_uploader :file, AssetUploader mount_uploader :file, AssetUploader

View File

@ -1,5 +1,6 @@
class Layout < DesignFile class Layout < DesignFile
include Parser include Parser
embeds_one :menu
embedded_in :design embedded_in :design
attr_reader :content attr_reader :content

10
app/models/design/menu.rb Normal file
View File

@ -0,0 +1,10 @@
class Menu
include Mongoid::Document
include Mongoid::Timestamps
field :levels, :type => Integer
field :values, :type => Hash
embedded_in :layout
end

View File

@ -205,9 +205,45 @@ module Parser
ret << item.i18n_variable[I18n.locale] ret << item.i18n_variable[I18n.locale]
ret << "</a>" ret << "</a>"
end end
c.define_tag 'menu' do |tag|
home = get_homepage
menu = page.design.layout.menu
menu_level(home, 1, menu)
end
end end
end end
def menu_level(page, current, menu)
if current <= menu.levels
res = "<ul id="
res << menu.values["id_#{current}"]
res << " class="
res << menu.values["class_#{current}"]
res << ">"
i = nil
i = 1 if menu.values["li_recursive_#{current}"]
if current == 1 && menu.values['home'].eql?('true')
res << menu_li(page, current, menu, i)
i += 1 if i
end
page.children.each do |child|
res << menu_li(child, current, menu, i)
i += 1 if i
end
res << "</ul>"
end
end
def menu_li(page, current, menu, i)
res = "<li class="
res << menu.values["li_class_#{current}"]
res << "_#{i}" if i
res << ">"
res << page.name
res << menu_level(page, current + 1, menu) if page.children.size > 0
res << "</li>"
end
#============= #=============
def parse_layout_layout_part(layout) def parse_layout_layout_part(layout)
content = layout.content.force_encoding('UTF-8') content = layout.content.force_encoding('UTF-8')
@ -222,6 +258,14 @@ module Parser
end end
c.define_tag 'stylesheets' do |tag| c.define_tag 'stylesheets' do |tag|
end end
c.define_tag 'menu' do |tag|
layout.build_menu(:levels => 0, :values => {}) unless layout.menu
layout.menu.levels = i = tag.attr['level'].to_i
layout.menu.values.merge!({'home' => tag.attr['home']}) if i == 1
layout.menu.values.merge!({"id_#{i}" => tag.attr['id'], "class_#{i}" => tag.attr['class'], "li_class_#{i}" => tag.attr['li_class'], "li_recursive_#{i}" => tag.attr['li_recursive']})
layout.menu.save
tag.expand
end
c.define_tag 'layout_part' do |tag| c.define_tag 'layout_part' do |tag|
data={} data={}
data[:class_tag]=tag.attr['class'].to_s data[:class_tag]=tag.attr['class'].to_s