RadiantCMSのextensionsでカスタムタグを実装
Adding Custom Radius Tags · radiant/radiant Wiki · GitHubを参考にして、extensionsでカスタムタグを実装してみます。
まずはRadiantアプリを作成します。
$ radiant -d sqlite3 mycms
$ cd mycms/
$ rake db:bootstrap
custom_tagsという名前でextensionsを作成します。
$ ./script/generate extension custom_tags
テストファーストで先にカスタムタグのSpecを実装します。
RAILS_ROOT/vendor/extensions/custom_tags/spec/lib/custom_tags_spec.rb
require File.dirname(__FILE__) + '/../spec_helper' describe 'CustomTags' do dataset :pages describe '<r:hello>' do it 'should render the correct HTML' do # Hello <名前>を出力するタグを作成します。 # <名前>は属性で渡せるようにします。 tag = '<r:hello name="t-taira" />' expected = "Hello t-taira" pages(:home).should render(tag).as(expected) end end end
カスタムタグを実装します。
RAILS_ROOT/vendor/extensions/custom_tags/lib/custom_tags.rb
module CustomTags include Radiant::Taggable desc "Puts hello." tag "hello" do |tag| %{Hello #{tag.attr['name']}} end end
実装したカスタムタグを有効にします。
RAILS_ROOT/custom_tags_extension.rb
# Uncomment this if you reference any of your controllers in activate # require_dependency 'application_controller' class CustomTagsExtension < Radiant::Extension version "1.0" description "Describe your extension here" url "http://yourwebsite.com/custom_tags" # define_routes do |map| # map.namespace :admin, :member => { :remove => :get } do |admin| # admin.resources :custom_tags # end # end def activate # この1行を追加するだけ Page.send :include, CustomTags #admin.tabs.add "Custom Tags", "/admin/custom_tags", :after => "Layouts", :visibility => [:all] end def deactivate #admin.tabs.remove "Custom Tags" end end
Specがパスすることを確認できたら、実際にadminサイトでカスタムタグを書いてみます。
homeという名前でページを新規作成して、その中に実装したr:helloタグを書きます。
http:/localhost:3000/homeにアクセスすると、表示できました!