Class: DcMenu
- Inherits:
-
Object
- Object
- DcMenu
- Includes:
- Mongoid::Document, Mongoid::Timestamps
- Defined in:
- app/models/dc_menu.rb
Overview
Schema information
Collection name: dc_menu : Menus
_id BSON::ObjectId _id
created_at Time created_at
updated_at Time updated_at
name String Menu name
description String Short description of menu
div_name String Div id name around menu area
link_prepend String Link field usually holds direct link to document. Prepand field holds data, that has to be prepanded to the link.
css String CSS for this menu
active Mongoid::Boolean Active
created_by BSON::ObjectId created_by
updated_by BSON::ObjectId updated_by
dc_menu_items Embedded:DcMenuItem Menu items
Default menu system for DRG CMS. Model recursively embeds DcMenuItem documents which (theoretically) results in infinite level of sub menus. In practice reasonable maximum level of 4 is advised.
Class Method Summary collapse
-
.choices4_menu(site) ⇒ Object
Will return all top level menu items of specified menu.
-
.choices4_menu_as_tree(site_id = nil) ⇒ Object
Will return menu structure for menus belonging to the site.
-
.do_sub_menu(menus, parent, ids) ⇒ Object
Subroutine of choices4_menu_as_tree.
-
.update_menu_item_link(record) ⇒ Object
Will update link value of selected menu_item.
Class Method Details
.choices4_menu(site) ⇒ Object
Will return all top level menu items of specified menu. Used in DcPage document for selecting top level selected menu, when document displayed in browser.
Called from DcApplicationHelper :dc_choices4_menu: method.
Parameters:
- Site
-
DcSite document. Site for which menu belongs to. If site is not specified
all current menus in dc_menus collection will be returned.
Returns: Array. Of choices prepared for select input field.
81 82 83 84 85 86 87 88 89 90 91 |
# File 'app/models/dc_menu.rb', line 81 def self.(site) rez = [] = (site..blank? ? all : where(name: site.)).to_a .each do || rez << [.name, nil] ..where(active: true).order_by(order: 1).each do || rez << ['-- ' + ., ._id] end end rez end |
.choices4_menu_as_tree(site_id = nil) ⇒ Object
Will return menu structure for menus belonging to the site.
Parameters:
- Site
-
DcSite document. Site for which menu belongs to. If site is not specified
all current menus in collection will be returned.
Returns: Array. Of choices prepared for tree:select input field.
117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
# File 'app/models/dc_menu.rb', line 117 def self.(site_id=nil) qry = where(active: true) # if site_id.class == BSON::ObjectId qry.in( dc_site_id: [nil, site_id] ) elsif site_id.respond_to?(:id) qry.in( dc_site_id: [nil, site_id.id] ) end # result = [] qry.each do || result << [.name, .id, nil,0] = ..order_by(order: 1).to_a result += (, .id, .id.to_s) if .size > 0 end result end |
.do_sub_menu(menus, parent, ids) ⇒ Object
Subroutine of choices4_menu_as_tree
96 97 98 99 100 101 102 103 104 105 |
# File 'app/models/dc_menu.rb', line 96 def self.(, parent, ids) #:nodoc: result = [] .each do |item| long_id = "#{ids};#{item.id}" result << [item., long_id, parent, item.order] = item..order_by(order: 1).to_a result += (, long_id, long_id) if .size > 0 end result end |
.update_menu_item_link(record) ⇒ Object
Will update link value of selected menu_item
Parameters:
- record
-
Array. Data of saved document.
141 142 143 144 145 146 147 148 149 150 151 152 153 154 |
# File 'app/models/dc_menu.rb', line 141 def self.(record) return unless record # ar = record..split(';') = find(ar.shift) while (item = ar.shift) do = ..find(item) end return unless .respond_to?(:link) # top level selected # .page_id = record.id if .respond_to?(:page_id) .link = record.subject_link if record.respond_to?(:subject_link) .save end |