Categories
open all | close allTags
Aptana | パソコン | デュアル・コア | Subversion | テスト | rake | Migration | モデル | ドキュメント | タグ | CSRF | アクセス制御 | 国際化 | RESTful | 認証 | OpenID | Flash | スキンエンジン | 名称 | フォームSearch
«Prev || 1 || Next»
サイドバーのウィジェッツ化実装の考察
管理画面のロジックとデザインをできるだけ切り離そうと作業中なのですが,案外難航しています。忙しくて一週間ほど全くプログラムできなかったのもあるのですが,もうちょっとかかりそうです。それはそれとして,アイディアレベルの話ですが,サイドバーをウィジェッツ化できるようにしたいと思ってます。実装としては,
①スキンの中に<%sidebar%>というスキン変数を置くことで,そこがウィジェッツ対応になる。ただし,これはインクルードファイルではなくスキンパーツ(レイアウト含む)の中にないといけない
②<%sidebar(left)%>みたいに名前も付けられる。複数置くときは名前が必須(一つは空でもいい)
③このスキン変数の自体はスペシャルスキンパーツで名前がsidebar(名前付きの場合はsidebar_leftのようにアンダースコアでつなげる)
④標準スキン変数でサイドバー対応のものはパーサのクラスで sidebar :categorylist のように宣言する
⑤これらのスキン変数のために call_categorylist のようにメソッドを用意(なくても動く)。このメソッドはサイドバーで使う名前を返す。メソッドがない場合はcategorylistを言語ファイルで変換
⑥プラグインの場合は event_sidebar を実装することでサイドバー対応になる
⑦event_sidebar はウィジェッツの名前を返す
⑧スキンパーツの編集画面からそのスキンパーツ内のサイドバーを編集する画面を呼び出す
⑨ドラグアンドドロップで編集できる
⑩ウィジェッツの実体は
<div class="sidebar"><h3><%text(プラグイン名)%></h3><div class="プラグイン名"><%プラグイン名%></div></div>
つまり,ウィジェッツ対応のスキンはCSSでクラスsidebarを実装する必要がある。
このほか,対話的にパラメータを変える仕組みを入れたいと思っていますが,そこはまだ詰めていません。
わけが分からない
昨日の続きでまだうまくいきません。というかRuby(Rails?)の動きが理解できません。結局,プラグインの子クラスの一覧を取る機能は次のように実現しました。
def self.list
@@pluginlist ||= Array.new
if @@pluginlist.size == 0
@@pluginlist = Class.constants.select do |c|
cclass = c.constantize
if (cclass.is_a? Module) && (cclass.constants.include? 'Base')
FoodynPlugin::Base > (c+'::Base').constantize
end
end
end
@@pluginlist
end最初にpluginlistにArrayを入れてサイズを調べるといったまだるっこしいところをしているのは,またもやリロードのときにpluginlistが空になってしまうという問題に対応するためです。
中身はClassでの定数の配列を獲得し,それがModuleの名前かどうかを調べ,次にさらにそのモジュールでBaseという定数が定義されているかどうかを調べて,最後にFoodynPlugin::Baseと比較しています。
ところが,リロードすると最後の比較のときにtrueにならなきゃいけないところがなぜかnilに。理解できない。こまったなあ。
アイテムへの記述方法
アイテムの下に新しい階層を作る場合,アイテム内に次のような形式で記述します。[[セクション|タイトル|識別子]]
例えば
[[*. |プラグインの概要|bookdesc]]こうすると,このアイテムの下に新しいサブカテゴリー「プラグインの概要」,「対応システムとインストール・設定」,「使い方」,「履歴」,「ダウンロード」
[[*. |対応システムとインストール・設定|booksystem]]
[[*. |使い方|bookusage]]
[[*. |履歴|bookhistory]]
[[*. |ダウンロード|bookdownload]]
ができ,同じ名前のアイテムも作られます。アイテムの表示は
1. プラグインの概要のようになり,新しいアイテムへのリンクが自動的に貼られます。
2. 対応システムとインストール・設定
3. 使い方
4. 履歴
5. ダウンロード
「セクション」の項目は連番を自動的に振るためのものです。「*」を連番に置き換えるので「Section *」といった書き方をすると「Section 1」などとなります。
「タイトル」の項目は編集時に変更できます。カテゴリー名やアイテムのタイトルは自動的に修正されます。
「識別子」の項目は一度作ったら修正しないでください。ここを変えると新しいカテゴリーを作成します(実際にはこの内容はカテゴリーの説明のところに入ります)。
スキン変数
1. <%Book(categorylist)%>無限階層版のMultipleCategoriesのサブカテゴリー順序指定機能に対応したカテゴリー表示をします。この機能に対応したほかのプラグイン,例えばznMCListで置き換えても構いません。
2. <%Book(テンプレート名, アイテム数)%>
スキンの本体で<%blog%>の代わりに使います。日付順ではなくカテゴリーの階層構造順にアイテムを表示します。
例えば
A┳B┳C
┃ ┗D
┗E
といった構造だった場合,
A,B,C,D,Eの順にアイテムを表示します。
テンプレートは特に制限ありませんが,日付表示などは取った方が見栄えがよくなります。
なお,ページ・スイッチに対応するためにはNP_Pager 0.2+以上が必要です。
プラグインの概要
このプラグインNP_Bookは階層構造のドキュメントをアイテムの編集機能だけで作るものです。使い方
アイテムへの記述方法スキン変数
対応システムとインストール・設定
階層構造の管理にNP_MultipleCategoriesの無限階層版を使用します。プラグインのインストール時にNP_MultipleCategoriesが入っている必要があります。また,NP_MultipleCategoriesをアンインストールするときは,先にこのプラグインをアンインストールしないといけません。ただし,無限階層版になっているかのチェックはしていないので,自己責任でお願いします。また,インストール時にサブカテゴリー名のフィールドを拡張します。デフォルトではプラグイン名のフィールドが40バイトしかないからです。
Nucleusのバージョンには依存しませんが,3.2.2以上をお勧めします。
インストールはファイルをプラグイン・ディレクトリにアップロードした後,普通にプラグイン管理画面から「Book」を追加するだけです。
プラグイン設定は,ダミー・アイテムに入れる初期文字列の設定だけです。新しい項目を作ったときに,プラグインが自動的にアイテムを作成しますが,その初期文字列です。デフォルトは「Under Construction」となっています。
このほか,スキンやテンプレートの設定も必要になります。詳しくは「使い方」の項目をごらんください。
履歴
2006.3.20 Ver.0.1 公開2006.4.18 Ver.0.2 公開 ページ・スイッチに対応
ダウンロード
NP_Book 0.1NP_Book
1. プラグインの概要2. 対応システムとインストール・設定
3. 使い方
4. 履歴
5. ダウンロード
«Prev || 1 || Next»