Top > 開発ガイド > コンポーネント開発逆引きリファレンス > WYSIWYGと同期したプレーンコンテンツを生成する

WYSIWYGと同期したプレーンコンテンツを生成する

対象バージョン

当ドキュメントはRubricks-0.6.x向けです。

概要

コンテンツからHTMLタグを除去する機能です。
通常、WYSIWYGを使って作成されたコンテンツ(以下、WYSIWYGコンテンツ)はHTML形式でそのままDBに格納されるため、下記のような問題が発生します。

  • 検索結果スニペットの中にHTMLタグが混ざってしまい表示がくずれる。preタグで囲ってもタグだらけで読みづらくなる。
  • HTMLタグ自体が検索対象になってしまう(画像を含むコンテンツが「img」という検索条件でヒットしてしまう等)。

本機能は、HTMLタグを含むコンテンツを保存すると自動的にHTMLタグを除去したプレーンなコンテンツ(以下、プレーンコンテンツ)を同期をとって保存するものです。
検索対象やスニペット表示にプレーンコンテンツを用いることで、上記の問題を解決することができます。

使い方

基本的な使い方

1. テーブルを定義します。
  WYSIWYGコンテンツを保存するカラムと、プレーンコンテンツを保存するカラムをそれぞれ定義します。
  プレーンコンテンツを保存するカラムは、同期先WYSIWYGコンテンツのカラム名+「_plain」と命名する必要があります。

create_table :news_items, :force => true do |t|
  #WYSIWYGコンテンツを保存するカラム
  t.column :article,        :text,  :null => false
  #プレーンコンテンツを保存するカラム
  t.column :article_plain,  :text,  :null => false
  ...
end

2. モデルクラスにacts_as_strippableメソッドを記述します。
  その際、1.で定義したWYSIWYGコンテンツを保存するカラムを指定します。
  これにより、after_saveにプレーンコンテンツを格納するコールバックが追加されます。

class NewsItem < ActiveRecord::Base
  acts_as_strippable :article
  ...
end

3. 通常通りsave!(もしくはsave)メソッドでモデルの保存を行います。

news.article = "<html><body><div>content1</div><span>content2</span><br></body></html>"
news.save!

#articleの値
news.article
=> "<html><body><div>content1</div><span>content2</span><br></body></html>"

#article_plainの値
news.article_plain
=> "content1content2"

応用的な使い方

acts_as_strippableのオプションを指定することでプレーン化ロジックを指定することもできます。

使用するプレーン化ロジックによってライブラリ導入要否や実行速度などに違いがありますので、適宜選択してください。

#プレーン化ロジックを指定する
acts_as_strippable :article, :strip_type => :hpricot

デフォルトのプレーン化ロジックを指定する場合は、RAILS_ROOT/config/environment.rb(または環境変数)で下記のように指定します。

ENV['RUBRICKS_STRIP_LIB'] = 'hpricot'

API

acts_as_strippable(target_column, options)

  • WYSIWYGと同期してプレーンコンテンツを保存できるように、モデルを拡張します。
引数必須初期値説明
target_column-Symbol/Arrayプレーン化対象のカラム名。
target_column+「_plain」というカラムに、プレーン化されたデータが格納されます。
options--Hashプレーン化ロジックを指定するためのオプションです。
下記「オプション」を参照してください。

オプション:

キー 必須 初期値 説明
:strip_type - 環境変数'RUBRICKS_STRIP_LIB'があればその値。
ない場合は:default。
Symbol HTMLパーサを指定します。指定可能な値は下記の2つです。
・:default…Railsに同梱されているHTMLパーサ(!TextHelper?/text-scanner)を利用します。
・:hpricot…OSSのHTMLパーサ「Hpricot」を利用します(gemでHpricotを導入してください)。
 Cライブラリを利用するため性能が高いのが特徴です。