diff --git a/app/controllers/admin/layouts_controller.rb b/app/controllers/admin/layouts_controller.rb new file mode 100644 index 00000000..987fc4e3 --- /dev/null +++ b/app/controllers/admin/layouts_controller.rb @@ -0,0 +1,82 @@ +class Admin::LayoutsController < ApplicationController + # GET /layouts + # GET /layouts.xml + def index + @layouts = Layout.all + + respond_to do |format| + format.html # index.html.erb + format.xml { render :xml => @layouts } + end + end + + # GET /layouts/1 + # GET /layouts/1.xml + def show + @layout = Layout.find(params[:id]) + + redirect_to "/#{@layout.name}" + end + + # GET /layouts/new + # GET /layouts/new.xml + def new + @layout = Layout.new + + respond_to do |format| + format.html # new.html.erb + format.xml { render :xml => @layouts } + end + end + + # GET /layouts/1/edit + def edit + @layout = Layout.find(params[:id]) + end + + # POST /layouts + # POST /layouts.xml + def create + @layout = Layout.new(params[:layout]) + + respond_to do |format| + if @layout.save + flash[:notice] = 'Layout was successfully created.' + format.html { redirect_to admin_layouts_url } + format.xml { render :xml => @layout, :status => :created, :location => @layouts } + else + format.html { render :action => "new" } + format.xml { render :xml => @layout.errors, :status => :unprocessable_entity } + end + end + end + + # PUT /layouts/1 + # PUT /layouts/1.xml + def update + @layout = Layout.find(params[:id]) + + respond_to do |format| + if @layout.update_attributes(params[:layout]) + flash[:notice] = 'Layout was successfully updated.' + format.html { redirect_to admin_layouts_url } + format.xml { head :ok } + else + format.html { render :action => "edit" } + format.xml { render :xml => @layout.errors, :status => :unprocessable_entity } + end + end + end + + # DELETE /layouts/1 + # DELETE /layouts/1.xml + def destroy + @layout = Layout.find(params[:id]) + @layout.destroy + + respond_to do |format| + format.html { redirect_to admin_layouts_url } + format.xml { head :ok } + end + end +end diff --git a/app/controllers/pages_controller.rb b/app/controllers/pages_controller.rb index 53d499ee..159d2e6c 100644 --- a/app/controllers/pages_controller.rb +++ b/app/controllers/pages_controller.rb @@ -2,9 +2,12 @@ class PagesController < ApplicationController def show @page = Page.find_by_name(params[:page_name]) + @layout = @page.layout if @page - render :text => Liquid::Template.parse(@page.content).render + @page_content = Liquid::Template.parse(@page.content).render + @layout_content = (@page.layout)? @layout.content : "{{page_content}}" + render :text => Liquid::Template.parse(@layout_content).render( 'page_content' => @page_content ) else render :text => '404 not found' end diff --git a/app/models/layout.rb b/app/models/layout.rb new file mode 100644 index 00000000..cc1ea534 --- /dev/null +++ b/app/models/layout.rb @@ -0,0 +1,8 @@ +class Layout < CouchFoo::Base + + property :name, String + property :content, String + + validates_presence_of :name + +end \ No newline at end of file diff --git a/app/models/page.rb b/app/models/page.rb index 56caa2d0..a34097fb 100644 --- a/app/models/page.rb +++ b/app/models/page.rb @@ -3,7 +3,21 @@ class Page < CouchFoo::Base property :name, String property :parent_name, String property :content, String + property :layout_id, String + property :layout_name, String + + belongs_to :layout validates_presence_of :name + before_save :setup_layout_id + + def setup_layout_id + if self.layout_name.blank? + self.layout_id = nil + else + self.layout_id = Layout.find_by_name( self.layout_name ).id + end + end + end \ No newline at end of file diff --git a/app/views/admin/layouts/edit.html.erb b/app/views/admin/layouts/edit.html.erb new file mode 100644 index 00000000..41ae1874 --- /dev/null +++ b/app/views/admin/layouts/edit.html.erb @@ -0,0 +1,21 @@ +
+ <%= f.label :name, "Name" %> + <%= f.text_field :name %> +
+ ++ <%= f.label :content, "Content" %> + <%= f.text_area :content, :size => '100x30' %> +
+ ++ <%= f.submit 'Update' %> +
+<% end %> + +<%= link_to 'Back', admin_layouts_path %> \ No newline at end of file diff --git a/app/views/admin/layouts/index.html.erb b/app/views/admin/layouts/index.html.erb new file mode 100644 index 00000000..508ba088 --- /dev/null +++ b/app/views/admin/layouts/index.html.erb @@ -0,0 +1,18 @@ +<%= layout.name %> | +<%= link_to 'Edit', edit_admin_layout_path(layout) %> | +<%= link_to 'Destroy', admin_layout_path(layout), :confirm => 'Are you sure?', :method => :delete %> | +
+ <%= f.label :name, "Name" %> + <%= f.text_field :name %> +
+ ++ <%= f.label :content, "Content" %> + <%= f.text_area :content, :size => '100x30' %> +
+ ++ <%= f.submit 'Create' %> +
+<% end %> + +<%= link_to 'Back', admin_layouts_path %> \ No newline at end of file diff --git a/app/views/admin/pages/edit.html.erb b/app/views/admin/pages/edit.html.erb index b9eb861b..77559c8c 100644 --- a/app/views/admin/pages/edit.html.erb +++ b/app/views/admin/pages/edit.html.erb @@ -8,6 +8,11 @@ <%= f.text_field :name %> ++ <%= f.label :layout_name, "Layout Name" %> + <%= f.text_field :layout_name %> +
+<%= f.label :content, "Content" %> <%= f.text_area :content, :size => '100x30' %> diff --git a/app/views/admin/pages/new.html.erb b/app/views/admin/pages/new.html.erb index a1482467..76412879 100644 --- a/app/views/admin/pages/new.html.erb +++ b/app/views/admin/pages/new.html.erb @@ -8,6 +8,11 @@ <%= f.text_field :name %>
++ <%= f.label :layout_name, "Layout Name" %> + <%= f.text_field :layout_name %> +
+<%= f.label :content, "Content" %> <%= f.text_area :content, :size => '100x30' %> diff --git a/config/routes.rb b/config/routes.rb index 7cdda3c3..6e988cb0 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -2,6 +2,7 @@ ActionController::Routing::Routes.draw do |map| map.namespace :admin do |admin| admin.resources :pages + admin.resources :layouts end # The priority is based upon order of creation: first created -> highest priority.