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



49
50
51
52
53
54
# File 'app/models/cms/layout.rb', line 49

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
  end.compact.sort
end

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

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



36
37
38
39
40
41
42
43
44
45
46
# File 'app/models/cms/layout.rb', line 36

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.



60
61
62
63
64
65
66
67
68
69
70
71
# File 'app/models/cms/layout.rb', line 60

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