今日のなんでやねん
2003-01-30 [長年日記]
凹 [tDiary] 新・カテゴリ機能
使いたいときにpluginを入れるだけでOK,そんなお手軽さを目指して実装方法を変更しました*1.今回は独自スタイルではなくtDiaryスタイル(tdiary_sryle.rb)を拡張することにしました.多分,この方針で実装したものが将来tDiary本体に取り込まれると思います.昨日のバージョンを試してくれた方には大変申し訳ないのですが,categoryというスタイルはなくなりました.
昨日よりは人柱率はかなり低いです.多分.
*1 というかたださんの案なんだけど.
凹 さて,今日のバージョンの使い方ですが,まずはこのファイルをダウンロードして適当なとこに展開します.あ,今日のバージョンはcvsのHEADに対するパッチ形式になっています.まずはcvsから最新のtdiaryを取得してください.
index.rbのあるディレクトリで
patch -p0 < tdiary-category.patch
とするとtdiary本体にパッチがあたります.
次に,skel/category.rhtmlをskel/に,plugin/category.rbをplugin/にコピーします.
これで終了です.
凹 昨日のバージョンから移行する方への注意点です.category.rbはindex.rbとtdiary.rbにマージされたので消滅しました.それからplugin/category_form.rbはplugin/category.rbに名前が変わりました.あと,tdiary.confの
@style = "category"
という行はもう不要です.消すか
@style = "tDiary"
に書き換えて下さい.
それから,キャッシュも消して下さい.
そうそう,td2ファイル中のFormat指定もcategoryからtDiaryに戻す必要があります.
凹 plugin/category.rbを消すだけでカテゴリ機能の使用を止めることができます.逆に言えば,今後カテゴリ機能が統合されたtDiaryではplugin/にcategory.rbをコピーするだけでカテゴリ機能を使うことができるようになるということです.お手軽でしょ?
凹 各スタイルは,サブタイトルのカテゴリ指定をparseし,to_htmlで特定のプラグイン呼出しをレンダリングする必要があります.もちろんスタイル作者が
このスタイルにはカテゴリ機能なんぞいらんわい!
とお考えなら必要ありませんが…
カテゴリ指定の文法はカテゴリ作者の方におまかせします.ユーザは指定できません.たださんは
カテゴリ指定の文法をユーザが選べないようにするのは問題ないと思います。スタイル自身の持つ文法に矛盾しない指定方法をユーザに選択させるのは酷だと思うからです。
とおっしゃっていました.
tDiaryスタイルではカテゴリを[ ]で囲むことにしていますが,例えばwikiスタイルではwikiスタイルの文法に矛盾しない文法をwikiスタイル作者*1が定義して下さい.
*1 ってたださん?
凹 各スタイルが実装すべき機能を説明します.ただしこれは将来変更される可能性があります.
DiaryBaseを継承する日記クラスでcategorized?categorizable? というメソッドを定義します.そのスタイルがカテゴリ機能に対応しているかどうかをtrue/falseで返して下さい.
それからセクションクラス(each_sectionがブロックの引数として渡すオブジェクトのクラス)は,次の3つのメソッドを実装して下さい.
- categories … そのセクションのカテゴリをArrayで返す.Arrayの各要素はString.
- categorized_subtitle … カテゴリ指定を特定のプラグイン呼出しに置換したサブタイトルを返す.
- stripped_subtitle … カテゴリ指定を取り除いたサブタイトルを返す.
[カテゴリ]
を
<%%= category_anchor("カテゴリ") %>に置換しています.これが実際にcategory_anchorを通ると
[<a href="?category=カテゴリ">カテゴリ</a>]
になります.
この辺の機能はモジュール化して切り出しておいて,それぞれのクラスはそのモジュールをincludeするだけでOKにしたいと考えています.
- 日記クラスの方はカテゴリ機能に対応しているかどうかに応じてCategorizableまたはUncategorizableというモジュールをincludeする.
- セクションクラスは,上記3つのメソッドを定義したCategorizableSectionというモジュールをincludeする.
- セクションクラスでは,クラス変数もしくはインスタンス変数にカテゴリ指定を抽出するための正規表現を格納しておいて,CategorizableSectionの各メソッドはその正規表現を用いてカテゴリ指定を抽出する.
いかがでしょうか?
このへんで勘弁しといたる.
旧「なんでやねん」はこちら.
| 2001/01
| 2001/02
| 2001/03
| 2001/04
| 2001/05
| 2001/06
| 2001/07
| 2001/08/25まで |
新カテゴリー機能使ってみました。よさげです。
↑はやっ
カテゴリ機能、導入してみました。いいですねぇ。当分使ってみようかと。<br>カテゴリの所、アイコンとか登録できると楽しみ広がるかも(文字だけではなく)