Add mongoid-tree to Item
This commit is contained in:
1 parent
fd52d00187
commit
6a443f0976
13 files changed
+60
-95
No files matched your search
@@ -15,7 +15,7 @@ class PagesController < ApplicationController
|
||||
|
||||
def show
|
||||
#begin
|
||||
@item = Item.first(:conditions => {:full_name => params[:page_name]})
|
||||
@item = Item.first(:conditions => {:path => params[:page_name]})
|
||||
if @item && @item.is_published && (@item.enabled_for.nil? ? true : @item.enabled_for.include?(I18n.locale.to_s))
|
||||
case @item._type
|
||||
when 'Page'
|
||||
@@ -33,16 +33,16 @@ class PagesController < ApplicationController
|
||||
|
||||
def index_from_link
|
||||
if params[:page]
|
||||
redirect_to "/#{@item.full_name}?page=#{params[:page]}&category_id=#{params[:category_id]}&tag_id=#{params[:tag_id]}"
|
||||
redirect_to "/#{@item.path}?page=#{params[:page]}&category_id=#{params[:category_id]}&tag_id=#{params[:tag_id]}"
|
||||
else
|
||||
redirect_to "/#{@item.full_name}?category_id=#{params[:category_id]}&tag_id=#{params[:tag_id]}"
|
||||
redirect_to "/#{@item.path}?category_id=#{params[:category_id]}&tag_id=#{params[:tag_id]}"
|
||||
end
|
||||
end
|
||||
|
||||
def show_from_link
|
||||
# debugger
|
||||
# a=1
|
||||
redirect_to "/#{@item.full_name}?id=#{params[:id]}&preview=#{params[:preview]}"
|
||||
redirect_to "/#{@item.path}?id=#{params[:id]}&preview=#{params[:preview]}"
|
||||
end
|
||||
|
||||
def load_orbit_bar
|
||||
|
||||
@@ -8,9 +8,9 @@ module Admin::ItemHelper
|
||||
dest = admin_page_path(node)
|
||||
when 'Link'
|
||||
dest = admin_link_path(node)
|
||||
no_nested = 'no-nest'
|
||||
end
|
||||
# ret << "<ol>" unless node.parent.nil?
|
||||
ret << "<li id='#{node.id}'>"
|
||||
ret << "<li id='#{node.id}' class='#{no_nested}'>"
|
||||
ret << "<div class='with_action'>"
|
||||
ret << (link_to node.i18n_variable[I18n.locale], dest)
|
||||
ret << "<div class='quick-edit hide'>"
|
||||
@@ -22,14 +22,13 @@ module Admin::ItemHelper
|
||||
ret << "</div>"
|
||||
ret << render_children(node)
|
||||
ret << "</li>"
|
||||
# ret << "</ol>" unless node.parent.nil?
|
||||
end
|
||||
ret.html_safe
|
||||
end
|
||||
|
||||
def render_children(parent)
|
||||
children = parent.ordered_children
|
||||
if !children.entries.blank?
|
||||
children = parent.children
|
||||
if !parent.children.entries.blank?
|
||||
ret = ''
|
||||
ret << "<ol class='#{'sortable' if parent.parent.nil?}'>"
|
||||
children.each do |child|
|
||||
@@ -43,15 +42,3 @@ module Admin::ItemHelper
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
# <ol class="sortable">
|
||||
# <li><div>Some content</div></li>
|
||||
# <li><div>Some content</div>
|
||||
# <ol>
|
||||
# <li><div>Some sub-item content</div></li>
|
||||
# <li><div>Some sub-item content</div></li>
|
||||
# </ol>
|
||||
# </li>
|
||||
# <li><div>Some content</div></li>
|
||||
# </ol>
|
||||
@@ -114,7 +114,7 @@ module ApplicationHelper
|
||||
def page_title(page)
|
||||
res = "<title>"
|
||||
page_title = page.title ? page.title[I18n.locale] : page.i18n_variable[I18n.locale]
|
||||
if page.is_home? && @site.title
|
||||
if page.root? && @site.title
|
||||
res << @site.title[I18n.locale]
|
||||
elsif @site.title && @site.title_always_on
|
||||
res << @site.title[I18n.locale] + ' - ' + page_title
|
||||
|
||||
+16
-54
@@ -2,59 +2,31 @@ class Item
|
||||
|
||||
include Mongoid::Document
|
||||
include Mongoid::Timestamps
|
||||
include Mongoid::Tree
|
||||
include Mongoid::Tree::Ordering
|
||||
|
||||
field :name, :index => true
|
||||
field :full_name, :index => true
|
||||
field :position, :type => Integer
|
||||
field :is_published, :type => Boolean, :default => false, :index => true
|
||||
field :enabled_for, :type => Array, :default => nil
|
||||
field :menu_enabled_for, :type => Array, :default => nil
|
||||
field :name
|
||||
field :path
|
||||
field :is_published, :type => Boolean, :default => false
|
||||
field :enabled_for, :type => Array, :default => nil
|
||||
field :menu_enabled_for, :type => Array, :default => nil
|
||||
|
||||
validates_format_of :name, :with => /^[0-9a-zA-Z\-_]+$/
|
||||
validates :name, :exclusion => { :in => LIST[:forbidden_item_names] }
|
||||
validates_uniqueness_of :name, :scope => :parent_id
|
||||
validates_presence_of :name, :full_name, :position
|
||||
validates_presence_of :name
|
||||
|
||||
validates_associated :parent, :children
|
||||
after_rearrange :rebuild_path
|
||||
|
||||
belongs_to :parent, :class_name => "Item"
|
||||
has_one :i18n_variable, :as => :language_value, :autosave => true, :dependent => :destroy
|
||||
has_many :children, :class_name => "Item", :as => 'parent'
|
||||
|
||||
before_validation :setup_default_value
|
||||
|
||||
def self.find_by_name(item_name)
|
||||
Item.first(:conditions => { :name => item_name, :is_published => true })
|
||||
end
|
||||
|
||||
# Get an array of ancestors
|
||||
def ancestors
|
||||
node, nodes = self, []
|
||||
nodes << node = node.parent while !node.parent.blank? rescue nil
|
||||
nodes.reverse
|
||||
end
|
||||
|
||||
# Get an array of ancestor's id
|
||||
def ancestor_ids
|
||||
node, nodes = self, []
|
||||
while !node.parent.blank? do
|
||||
node = node.parent rescue nil
|
||||
nodes << node.id if node
|
||||
end
|
||||
# nodes << node = node.parent while !node.parent.blank? rescue nil
|
||||
nodes.reverse
|
||||
end
|
||||
|
||||
# Build the url from the array of ancestors
|
||||
def url
|
||||
urls = ancestors.map{ |a| a.name } << self.name
|
||||
urls.join("/")
|
||||
end
|
||||
|
||||
def ordered_children
|
||||
self.children.asc(:position)
|
||||
end
|
||||
|
||||
def ordered_and_visible_children
|
||||
objects = ordered_children
|
||||
def visible_children
|
||||
objects = self.children
|
||||
a = []
|
||||
if objects
|
||||
objects.each do |object|
|
||||
@@ -66,20 +38,10 @@ class Item
|
||||
|
||||
protected
|
||||
|
||||
def setup_default_value
|
||||
# Set the position value within the parent scope
|
||||
if self.position.blank?
|
||||
max_page = Item.where(:parent_id => self.parent_id).count
|
||||
self.position = (max_page)? max_page + 1 : 1
|
||||
end
|
||||
|
||||
# Build the full_name from the ancestors array
|
||||
full_node = self.ancestors.map{ |a| a.name }.push( self.name )
|
||||
# Remove root node if not root
|
||||
full_node.shift if full_node.size >= 2
|
||||
self.full_name = full_node.join("/")
|
||||
def rebuild_path
|
||||
self.path = (self.ancestors_and_self - [Item.root]).collect{|x| x.name unless x.root?}.join('/')
|
||||
end
|
||||
|
||||
|
||||
# Enable the validation for parent_id
|
||||
def validates_presence_of_parent_id?
|
||||
true
|
||||
|
||||
@@ -15,10 +15,6 @@ class Page < Item
|
||||
before_save :create_parts, :set_key
|
||||
|
||||
# embeds_many :custom_images, :class_name => 'Image', as: :design_image
|
||||
|
||||
def is_home?
|
||||
self.parent ? false : true
|
||||
end
|
||||
|
||||
def title
|
||||
@title ||= I18nVariable.first(:conditions => {:key => 'title', :language_value_id => self.id, :language_value_type => self.class}) rescue nil
|
||||
|
||||
@@ -19,9 +19,6 @@
|
||||
|
||||
stop: function(event, ui) {
|
||||
$.post("<%= admin_update_position_path %>", { id: ui.item.attr('id'), parent_id: ui.item.parent().closest('li').attr('id'), position: ui.item.index() } );
|
||||
// console.log("parent: " + ui.item.parent().closest('li').attr('id'));
|
||||
// console.log("id: " + ui.item.attr('id'));
|
||||
// console.log("position: " + ui.item.index());
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
Reference in new issue
Block a user