115. app/controllers
app/models
app/views
config/locales
config/routes
config/routes.rb
config/routes/article/routes.rb
SS::Application.routes.draw do
…
content "article" do
get "/" => redirect { |p, req| "#{req.path}/pages" }, as: :main
get "generate" => "generate#index“
post "generate" => "generate#run“
resources :pages, concerns: [:deletion, :copy, :move, :lock]
end
…
node "article" do
get "page/(index.:format)" => "public#index", cell: "nodes/page“
get "page/rss.xml" => "public#rss", cell: "nodes/page", format: "xml“
end
part "article" do
get "page" => "public#index", cell: "parts/page"
end
page "article" do
get "page/:filename.:format" => "public#index", cell: "pages/page“
end
end
シラサギの構成 Routing
config/routes/article/routes.rb
116. app/controllers
app/models
app/views
config/locales
config/routes
config/routes.rb
config/routes/article/routes.rb
ルーティング追加ブロック
管理画面 content
公開画面 node, page, part
※namespaceの拡張
シラサギの構成 Routing
SS::Application.routes.draw do
…
content "article" do
get "/" => redirect { |p, req| "#{req.path}/pages" }, as: :main
get "generate" => "generate#index“
post "generate" => "generate#run“
resources :pages, concerns: [:deletion, :copy, :move, :lock]
end
…
node "article" do
get "page/(index.:format)" => "public#index", cell: "nodes/page“
get "page/rss.xml" => "public#rss", cell: "nodes/page", format: "xml“
end
part "article" do
get "page" => "public#index", cell: "parts/page"
end
page "article" do
get "page/:filename.:format" => "public#index", cell: "pages/page“
end
end
config/routes/article/routes.rb
118. シラサギの構成 Routing 管理画面
content "article" do
resources :pages
end
article_pages GET /.:site/article:cid/pages(.:format) article/pages#index {:cid=>/w+/}
POST /.:site/article:cid/pages(.:format) article/pages#create {:cid=>/w+/}
new_article_page GET /.:site/article:cid/pages/new(.:format) article/pages#new {:cid=>/w+/}
edit_article_page GET /.:site/article:cid/pages/:id/edit(.:format) article/pages#edit {:cid=>/w+/}
article_page GET /.:site/article:cid/pages/:id(.:format) article/pages#show {:cid=>/w+/}
PATCH /.:site/article:cid/pages/:id(.:format) article/pages#update {:cid=>/w+/}
PUT /.:site/article:cid/pages/:id(.:format) article/pages#update {:cid=>/w+/}
DELETE /.:site/article:cid/pages/:id(.:format) article/pages#destroy {:cid=>/w+/}
119. シラサギの構成 Routing 管理画面
content "article" do
resources :pages
end
Ex. 管理画面
記事一覧: http://demo.ss-proj.org/.demo/article1/pages
記事詳細: http://demo.ss-proj.org/.demo/article1/pages/28
article_pages GET /.:site/article:cid/pages(.:format) article/pages#index {:cid=>/w+/}
POST /.:site/article:cid/pages(.:format) article/pages#create {:cid=>/w+/}
new_article_page GET /.:site/article:cid/pages/new(.:format) article/pages#new {:cid=>/w+/}
edit_article_page GET /.:site/article:cid/pages/:id/edit(.:format) article/pages#edit {:cid=>/w+/}
article_page GET /.:site/article:cid/pages/:id(.:format) article/pages#show {:cid=>/w+/}
PATCH /.:site/article:cid/pages/:id(.:format) article/pages#update {:cid=>/w+/}
PUT /.:site/article:cid/pages/:id(.:format) article/pages#update {:cid=>/w+/}
DELETE /.:site/article:cid/pages/:id(.:format) article/pages#destroy {:cid=>/w+/}
/.:site/article:cid
pages
120. シラサギの構成 Routing 公開画面
node "article" do … end
part "article" do … end
page "article" do … end
article_node GET /.:site/nodes/article/page(/index.:format) cms/public#index {:cell=>"nodes/page"}
article_part_page GET /.:site/parts/article/page(.:format) cms/public#index {:cell=>"parts/page"}
GET /.:site/pages/article/page/:filename.:format cms/public#index {:cell=>"pages/page"}
121. シラサギの構成 Routing 公開画面
node "article" do … end
part "article" do … end
page "article" do … end
article_node GET /.:site/nodes/article/page(/index.:format) cms/public#index {:cell=>"nodes/page"}
article_part_page GET /.:site/parts/article/page(.:format) cms/public#index {:cell=>"parts/page"}
GET /.:site/pages/article/page/:filename.:format cms/public#index {:cell=>"pages/page"}
Ex. 公開画面
記事一覧フォルダー: http://demo.ss-proj.org/docs/
記事ページ: http://demo.ss-proj.org/docs/30.html
cms/public#index cell: " nodes/page " とは?
138. ブログページ作成
Blog Page Model
app/models/blog/page.rb
class Blog::Page
include Cms::Model::Page
include Cms::Addon::Meta
include Cms::Addon::Body
include Cms::Addon::File
include Cms::Addon::Release
include Cms::Addon::RelatedPage
include Category::Addon::Category
include Workflow::Addon::Approver
before_save :seq_filename, if: ->{ basename.blank? }
default_scope ->{ where(route: "blog/page") }
private
def validate_filename
(@basename && @basename.blank?) ? nil : super
end
def seq_filename
self.filename = dirname ? "#{dirname}#{id}.html" : "#{id}.html"
end
end
139. ブログページ作成
Blog Page Model
app/models/blog/page.rb
• include Cms::Model::Page
app/models/concerns/cms/model/page.rb
DB の Collection は cms_pages に
class Blog::Page
include Cms::Model::Page
include Cms::Addon::Meta
include Cms::Addon::Body
include Cms::Addon::File
include Cms::Addon::Release
include Cms::Addon::RelatedPage
include Category::Addon::Category
include Workflow::Addon::Approver
before_save :seq_filename, if: ->{ basename.blank? }
default_scope ->{ where(route: "blog/page") }
private
def validate_filename
(@basename && @basename.blank?) ? nil : super
end
def seq_filename
self.filename = dirname ? "#{dirname}#{id}.html" : "#{id}.html"
end
end
Cms::Model::Page
140. ブログページ作成
Blog Page Model
app/models/blog/page.rb
• include Addons
include Cms::Addon::Meta
include Cms::Addon::Body
include Cms::Addon::File
…
class Blog::Page
include Cms::Model::Page
include Cms::Addon::Meta
include Cms::Addon::Body
include Cms::Addon::File
include Cms::Addon::Release
include Cms::Addon::RelatedPage
include Category::Addon::Category
include Workflow::Addon::Approver
before_save :seq_filename, if: ->{ basename.blank? }
default_scope ->{ where(route: "blog/page") }
private
def validate_filename
(@basename && @basename.blank?) ? nil : super
end
def seq_filename
self.filename = dirname ? "#{dirname}#{id}.html" : "#{id}.html"
end
end
Addons
141. ブログページ作成
Blog Page Model
app/models/blog/page.rb
• default_scope
where(route: "blog/page")
route: コンテンツを識別する値
"blog/page" ブログ/ブログページ
class Blog::Page
include Cms::Model::Page
include Cms::Addon::Meta
include Cms::Addon::Body
include Cms::Addon::File
include Cms::Addon::Release
include Cms::Addon::RelatedPage
include Category::Addon::Category
include Workflow::Addon::Approver
before_save :seq_filename, if: ->{ basename.blank? }
default_scope ->{ where(route: "blog/page") }
private
def validate_filename
(@basename && @basename.blank?) ? nil : super
end
def seq_filename
self.filename = dirname ? "#{dirname}#{id}.html" : "#{id}.html"
end
end
default_scope
160. 天気入力フォーム作成
Blog Weather Addon
app/models/concerns/blog/addon/weather.rb
• 天気アドオン
module Blog::Addon
module Weather
extend ActiveSupport::Concern
extend SS::Addon
included do
field :weather, type: String
permit_params :weather
public
def weather_options
[ ["晴れ", "sunny"], ["曇り", "cloudy"],
["雨", "rain"], ["雪", "snow"], ]
end
end
end
end
field
161. 天気入力フォーム作成
Blog Page Model
app/models/concerns/blog/addon/weather.rb
app/models/blog/page.rb
• 天気アドオンをページに追加
class Blog::Page
include Cms::Model::Page
include Cms::Addon::Meta
include Cms::Addon::Body
include Cms::Addon::File
include Cms::Addon::Release
include Cms::Addon::RelatedPage
include Category::Addon::Category
include Workflow::Addon::Approver
include Blog::Addon::Weather
before_save :seq_filename, if: ->{ basename.blank? }
default_scope ->{ where(route: "blog/page") }
private
def validate_filename
(@basename && @basename.blank?) ? nil : super
end
def seq_filename
self.filename = dirname ? "#{dirname}#{id}.html" : "#{id}.html"
end
end
Include weather addon
173. 一覧フォルダー作成
Blog Node Model
app/models/blog/node.rb
• ブログ一覧フォルダー
module Blog::Node
class Base
include Cms::Model ::Node
default_scope ->{ where(route: /^blog//) }
end
class Page
include Cms::Model ::Node
include Cms::Addon::PageList
default_scope ->{ where(route: "blog/page") }
end
end
174. 一覧フォルダー作成
Blog Agents Nodes/Page Controller & View
app/models/blog/node.rb
app/controllers/blog/agents/nodes/page_controller.rb
• 公開側コントローラー
class Blog::Agents::Nodes::PageController < ApplicationController
include Cms::NodeFilter::View
helper Cms::ListHelper
Public
def pages
Blog::Page.site(@cur_site).public(@cur_date).
where(@cur_node.condition_hash)
end
def index
@items = pages.
order_by(@cur_node.sort_hash).
page(params[:page]). per(@cur_node.limit)
render_with_pagination @items
end
end