Class: Cms::Layout

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
app/models/cms/layout.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.app_layouts_for_selectObject

List of available application layouts



58
59
60
61
62
63
# File 'app/models/cms/layout.rb', line 58

def self.app_layouts_for_select
  Dir.glob(File.expand_path('app/views/layouts/**/*.html.*', Rails.root)).collect do |filename|
    filename.gsub!("#{File.expand_path('app/views/layouts', Rails.root)}/", '')
    filename.split('/').last[0...1] == '_' ? nil : filename.split('.').first
  end.compact.sort
end

.options_for_select(site, layout = nil, current_layout = nil, depth = 0, spacer = '. . ') ⇒ Object

– Class Methods ——————————————————– Tree-like structure for layouts



45
46
47
48
49
50
51
52
53
54
55
# File 'app/models/cms/layout.rb', line 45

def self.options_for_select(site, layout = nil, current_layout = nil, depth = 0, spacer = '. . ')
  out = []
  [current_layout || site.layouts.roots].flatten.each do |l|
    next if layout == l
    out << [ "#{spacer*depth}#{l.label}", l.id ]
    l.children.each do |child|
      out += options_for_select(site, layout, child, depth + 1, spacer)
    end
  end
  return out.compact
end

Instance Method Details

#merged_contentObject

– Instance Methods —————————————————– magical merging tag is cms:page:content If parent layout has this tag defined its content will be merged. If no such tag found, parent content is ignored.



69
70
71
72
73
74
75
76
77
78
79
80
# File 'app/models/cms/layout.rb', line 69

def merged_content
  if parent
    regex = /\{\{\s*cms:page:content:?(?:(?::text)|(?::rich_text))?\s*\}\}/
    if parent.merged_content.match(regex)
      parent.merged_content.gsub(regex, content.to_s)
    else
      content.to_s
    end
  else
    content.to_s
  end
end