簡単に入力出来るブログ記事(textile)
ブログとかお知らせとかは単純なテキストで入力出来るほうが使いやすいのですが、それでもある程度の表現力は欲しいものです。単純に改行文字1つを <br/>タグに、改行文字2つを <p>に変換するようなものなら簡単に自作出来るのですが、それよりも箇条書きやキーワードの強調も出来たほうが便利です。
最近、うちの事務所では Ruby on Rails (以下 Rails)の仕事をメインでやっています。また、プロジェクト管理は Redmine を使っており、Redmine の Wiki フォーマッタの textile に慣れてきてしまっています。そんなこともあって、このサイトの各コンテンツも textile で入力出来るようにしました。
textile というのは、簡単に HTML文書が書けるようになるテキストフォーマットです。例えば以下の文書を書いておけば、
h2. ランディネットワークとは "ランディネットワーク":http://www.randynetwork.com/ は、滋賀県草津市 の *Web 制作事業者*です。 個人事業ならではの、 _きめ細かいサービス_ をご提供いたします。 * Webアプリケーションの制作、運用支援 * Webサイトの構築、導入、運用支援
以下の HTML文書に変換してくれます( 出力結果 )。
<h2>ランディネットワークとは</h2> <p><a href="http://www.randynetwork.com/">ランディネットワーク</a> は、滋賀県草津市 の <strong>Web 制作事業者</strong>です。<br/> 個人事業ならではの、 <em>きめ細かいサービス</em> をご提供いたします。</p> <ul> <li>Webアプリケーションの制作、運用支援</li> <li>Webサイトの構築、導入、運用支援</li> </ul>
HTMLタグ を直接入力する手間を考えると、非常に楽に入力できるようになります。
Ruby on Rails から使う
Rails には、textile を使う為のヘルパーが準備されています( actionpack/lib/helpers/text_helper.rb )。 textilize() , textilize_without_paragraph() です。 textilize_without_paragraph() は <p> タグが付きませんのでタイトル行等に使えます。これらのヘルパー関数を使うにはテンプレートの中で以下のように呼び出します。
<div class="entry"> <h2><%= texilize_without_paragraph @entry.title %></h2> <div class="body"> <%= texilize @entry.body %> </div> </div>
当サイト CMS の場合、 app/helpers/application_helper.rb に以下の関数を定義していますので、フォーマット指定によって、HTMLをそのまま出力したり、textile フォーマットを HTMLに変換したりを切り替えています。
def text_to_html(text, params = { }) params[:format] = :textile unless params[:format] if params[:format] == :html text elsif params[:format] == :text # 改行を HTMLタグに。URL等はリンクに auto_link(simple_format(text), :all) else textilize(text) end end
テンプレートからは、以下のように呼び出します。
<div class="entry"> <h2><%= texilize_without_paragraph @entry.title %></h2> <div class="body"> <%= text_to_html @entry.body, :format => :textile %> </div> </div>
