Modification of the page model
This commit is contained in:
		
							parent
							
								
									4399804e19
								
							
						
					
					
						commit
						3d97c5bfda
					
				|  | @ -54,9 +54,9 @@ module ApplicationHelper | |||
|     if node | ||||
|       case node._type | ||||
|         when 'Page' | ||||
|           dest = admin_page_path(:id => node.id) | ||||
|           dest = admin_page_path(node) | ||||
|         when 'Link' | ||||
|           dest = admin_link_path(:id => node.id) | ||||
|           dest = admin_link_path(node) | ||||
|       end | ||||
|       ret << "<li>" | ||||
|       ret << (link_to node.name, dest) | ||||
|  |  | |||
|  | @ -1,20 +1,21 @@ | |||
| class Layout | ||||
|     | ||||
|    include Mongoid::Document | ||||
|   include Mongoid::Document | ||||
|   include Mongoid::Timestamps | ||||
|     | ||||
|    field :name, :index => true | ||||
|    field :description | ||||
|    field :content | ||||
|     | ||||
|    references_many :children, :class_name => "Item" | ||||
|     | ||||
|    validates_presence_of :name | ||||
|    validates_format_of :name, :with => /^[0-9a-zA-Z\-_]+$/ | ||||
|    validates_uniqueness_of :name | ||||
|     | ||||
|    def self.exist_one? | ||||
|       Layout.count > 0 | ||||
|    end | ||||
| 
 | ||||
|   field :name, :index => true | ||||
|   field :description | ||||
|   field :content | ||||
| 
 | ||||
|   references_many :children, :class_name => "Item" | ||||
|   has_many :layout_parts | ||||
| 
 | ||||
|   validates_presence_of :name | ||||
|   validates_format_of :name, :with => /^[0-9a-zA-Z\-_]+$/ | ||||
|   validates_uniqueness_of :name | ||||
| 
 | ||||
|   def self.exist_one? | ||||
|     Layout.count > 0 | ||||
|   end | ||||
|     | ||||
| end | ||||
|  |  | |||
|  | @ -0,0 +1,11 @@ | |||
| class LayoutPart | ||||
|     | ||||
|   include Mongoid::Document | ||||
|   include Mongoid::Timestamps | ||||
| 
 | ||||
|   field :name | ||||
|   field :content | ||||
| 
 | ||||
|   belongs_to :layout | ||||
| 
 | ||||
| end | ||||
|  | @ -9,6 +9,7 @@ class Page < Item | |||
|   validates_presence_of :layout_name, :layout_id | ||||
|    | ||||
|   referenced_in :layout | ||||
|   has_many :page_parts | ||||
|    | ||||
|   protected | ||||
|    | ||||
|  |  | |||
|  | @ -0,0 +1,11 @@ | |||
| class PagePart | ||||
|     | ||||
|   include Mongoid::Document | ||||
|   include Mongoid::Timestamps | ||||
| 
 | ||||
|   field :name | ||||
|   field :content | ||||
| 
 | ||||
|   belongs_to :page | ||||
| 
 | ||||
| end | ||||
|  | @ -1,10 +1,7 @@ | |||
| module Parser | ||||
|    | ||||
|   def parser_context(page_content, attributes = {}) | ||||
|   def parser_context(page, attributes = {}) | ||||
|     Radius::Context.new do |c| | ||||
|       c.define_tag 'content' do |tag| | ||||
|         page_content | ||||
|       end | ||||
|       c.define_tag 'snippet' do |tag| | ||||
|         snippet = Snippet.first(:conditions => {:name => tag.attr['name']}) | ||||
|         if snippet | ||||
|  | @ -72,6 +69,13 @@ module Parser | |||
|           res << '>' | ||||
|         end | ||||
|       end | ||||
|       c.define_tag 'layout_part' do |tag| | ||||
|         ret = '' | ||||
|         ret << "<div id='#{tag.attr['name']}'>" | ||||
|         ret << (page.page_parts.detect{ |p| p.name.to_s == tag.attr['name'].to_s }).content rescue '' | ||||
|         ret << tag.expand | ||||
|         ret << '</div>' | ||||
|       end | ||||
|     end | ||||
|   end | ||||
|    | ||||
|  | @ -83,11 +87,11 @@ module Parser | |||
|    | ||||
|   def parse_page(page) | ||||
|     if page._type == 'Page' | ||||
|     layout_content = (page.layout)? page.layout.content : "<r:content />" | ||||
|     context = parser_context(page.content) | ||||
|     parser = Radius::Parser.new(context, :tag_prefix => 'r') | ||||
|     parser.parse(parser.parse(layout_content)) | ||||
|   end | ||||
|       layout_content = page.layout.content  | ||||
|       context = parser_context(page) | ||||
|       parser = Radius::Parser.new(context, :tag_prefix => 'r') | ||||
|       parser.parse(parser.parse(layout_content)) | ||||
|     end | ||||
|   end | ||||
|    | ||||
|   def self.included(base) | ||||
|  |  | |||
|  | @ -32,6 +32,8 @@ namespace :dev do | |||
|     var_11 = I18nVariable.create!( :document_class => 'Page', :key => 'about', :en => 'About', :zh_tw => '關於我們' ) | ||||
|     var_12 = I18nVariable.create!( :document_class => 'Link', :key => 'google', :en => 'Google', :zh_tw => 'Google' ) | ||||
| 
 | ||||
| 
 | ||||
|     # TODO: modify for the new model | ||||
|     urm_1 = UserRoleModel.new( :key => 'teacher', :i18n_variable_id => var_1.id, :built_in => true ) | ||||
|     urm_1.attribute_models.build( :key => 'discipline', :locale => true, :i18n_variable_id => var_2.id, :markup => 'text_field', :list_options => [], :built_in => true ) | ||||
|     urm_1.attribute_models.build( :key => 'department', :locale => true, :i18n_variable_id => var_3.id, :markup => 'text_field', :list_options => [], :built_in => true ) | ||||
|  | @ -45,11 +47,17 @@ namespace :dev do | |||
|     uim_1.attribute_models.build( :key => 'first_name', :locale => true, :i18n_variable_id => var_9.id, :markup => 'text_field', :list_options => [], :built_in => true ) | ||||
|     uim_1.save!  | ||||
|      | ||||
|     layout = Layout.create!( :name => 'root', :description => 'root', :content => File.open("#{RAILS_ROOT}/lib/template/root.layout").read )   | ||||
|      | ||||
|     home = Page.create!( :i18n_variable_id => var_10.id, :layout_id => layout.id, :name => 'home', :is_published => true, :content => File.open("#{RAILS_ROOT}/lib/template/root.home").read ) | ||||
|     layout = Layout.create!( :name => 'root', :description => 'root', :content => File.open("#{RAILS_ROOT}/lib/template/root.layout").read ) | ||||
|     layout.layout_parts.create!( :name => 'header', :content => "<r:language_bar /><r:snippet name='nav' />" ) | ||||
|     layout.layout_parts.create!( :name => 'main_content' ) | ||||
|     layout.layout_parts.create!( :name => 'footer', :content => "<r:snippet name='footer' />" ) | ||||
|      | ||||
|     Page.create!( :i18n_variable_id => var_11.id, :layout_id => layout.id, :name => 'about', :is_published => true, :parent_id => home.id, :content => File.open("#{RAILS_ROOT}/lib/template/about.page").read )                       | ||||
|     home = Page.create!( :i18n_variable_id => var_10.id, :layout_id => layout.id, :name => 'home', :is_published => true ) | ||||
|     home.page_parts.create!( :name => 'main_content', :content => "<r:locale en='This is the homepage' zh_tw='這是首頁' />" ) | ||||
|      | ||||
|     about = Page.create!( :i18n_variable_id => var_11.id, :layout_id => layout.id, :name => 'about', :is_published => true, :parent_id => home.id )     | ||||
|     about.page_parts.create!( :name => 'main_content', :content => "This is about" )                   | ||||
|      | ||||
|     Link.create!( :i18n_variable_id => var_12.id, :name => 'google', :is_published => true, :parent_id => home.id, :url => 'www.google.com' ) | ||||
|      | ||||
|  |  | |||
|  | @ -8,18 +8,17 @@ | |||
|   </head> | ||||
| 
 | ||||
|   <body> | ||||
|     <div id="header"> | ||||
| 		<r:layout_part name='header'> | ||||
|       <r:language_bar /> | ||||
|       <r:snippet name='nav' /> | ||||
|     </div> | ||||
| 		</r:layout_part> | ||||
|        | ||||
| 	  <div id="container">   | ||||
| 		  <r:content />	 | ||||
| 	  </div> | ||||
| 	  <r:layout_part name="main_content">	 | ||||
| 	  </r:layout_part> | ||||
| 
 | ||||
|     <div id="footer">         | ||||
|     <r:layout_part name="footer">         | ||||
|       <r:snippet name='footer' /> | ||||
|     </div> | ||||
|     </r:layout_part> | ||||
|        | ||||
|   </body> | ||||
| </html> | ||||
|  |  | |||
		Reference in New Issue