DokuWiki

It's better when it's simple

ユーザ用ツール

サイト用ツール


ja:plugin:datatemplate

文書の過去の版を表示しています。


データテンプレートプラグイン

互換性のある DokuWiki バージョン

rincewind

plugin データプラグインへのテンプレート機能の追加

最終更新日
2011-08-27
種類
Syntax
リポジトリ
ソース
必要
data, sqlite

この拡張は二年以上更新されていません。もはや維持管理や対応がされておらず、互換性に問題がある可能性があります。

This extension is not in the 'plugin' or 'template' namespace and is therefore ignored.

類似 dataloop, structtemplate, templater

タグ data, database, listing, template

このプラグインは、データプラグインの構造化データを、テンプレートを使用して表示する機能を追加します。 テンプレートは、データ入力や複数の入力のリストに対して個々に適用できます。 更に、このプラグインは、検索フォーム・ページ割付け・結果のキャッシュを提供します。

ダウンロードとインストール

プラグインのダウンロードとインストールは、上記の URL を使って プラグイン管理 でできます。手動インストール方法は プラグイン を参照してください。

変更履歴

テンプレート定義

テンプレートは、プレースホルダを含む別のWikiページです。 プレースホルダは次の2種類があります:

  • @@ で囲まれたプレースホルダ(例:@@Title@@)は、テンプレートのページをwiki 構文に従って処理した 後から 置き換えられます。データプラグインの特殊な型の変換規則は適用されます。_mail という接尾語を持つフィールドは、e-mail のリンクとして出力されます。
  • プレースホルダ名の直前に感嘆符を付加したプレースホルダ(例:@@!Title@@)は、テンプレートを Dokuwiki パーサーに処理される 前に 置き換えられます。これにより、画像の使用といった特定の状況下でのよりきめ細かな制御が可能です。

以下のようなテンプレートの場合、

=== @@Page@@ ===

{{@@!imgname@@?nolink&70 }}
**Phone**: @@phone@@ \\
**E-Mail**: @@email@@

imgname フィールドの値を、DokuWikiの画像構文でファイル名として扱い、電話やメールアドレスを右側に置いた、左フロート画像となります。datatemplatelist のカラムのパラメータに列挙された際、email フィールドに _mail が付加されていれば、e-mail のリンクとして出力されます。

構文

このプラグインには、 3個の 異なる構文のブロックがあります。 最初の二つは、基本的にデータプラグインの場合と同じですが、template パラメータが追加されます:

  • datatemplateentry はデータプラグインの dataentry に相当します。置換用のプレースホルダとして(与えられた場合) headers パラメータに与えられた名前を使用する必要があることに注意してください。
  • datatemplatelist はデータプラグインの datalist に相当します。兄弟とは違い datatemplatelist にはページ割付け機能があります。

上記のように、template パラメータの値は、テンプレート定義を含む Dokuwiki ページです。datatemplateentry の一例は以下のとおりです:

---- datatemplateentry member ----
template   : tpl_member
firstname  : Christoph
lastname   : Clausen
type       : PhD Student
active     : yes
addr       : GAP-Optique \\ Rue de l'Ecole de Medecine 20 \\ CH-1211 Geneve 4
----

Filter Form

Filter Form は、データプラグインやデータテンプレートプラグインに新機能を追加します。すでに datatabledatalistdatatemplatelistが含まれるページで使用できます。構文例は次のようになります:

---- filterform ----
fields: Any, Title, Journal, Author, Volume, Page, Year, Abstract
----

fields パラメータは、ページが出力される際にドロップダウンリストになります。値は、カラム名かヘッダーのリストです。ドロップダウンリストの隣はテキストフィールドです。フォームが送信されると、ドロップダウンで選択した場所にテキストフィールド内のテキストが含まれているデータだけが表示されます。例えば datatable のソース内に filter: Title~*weather* みたいな行を追加することと事実上同じです。

繰返しフォームを送信することで、次々にフィルター条件を追加することができます。また、適用されたフィルタを、個別に削除することができます。

デモ

ジュネーブ大学で応用物理学のグループの Publications page を参照してください。 datatemplatelist と filter form が動いています。リストの各項目は、datatemplate 項目です(BibTex を入力とする別のプラグインで作成しています)。Members page は同じように、このプラグインに基づいています。

キャッシュについての技術メモ

データプラグインは、単純なキーと値のペアとして、データを SQLite データベースに格納します。これは多くの柔軟性をもたらす一方で、データベースからデータを照会する時欠点があります。“普通の” SQLテーブルから結果のように見える内容を得るため、データプラグインは JOIN 操作を使って目的に合わせます。これは非常に時間がかかることがあります。前述した出版物のリストのケースで、一明細あたり約 300 項目の数件を得るのに、数秒かかりました。これはそんなに悪くない場合だが、抽出や一行で幾つかのそのような要求が発生するページナビゲーションでは、すぐイライラの原因になる。

datatemplatelist の単純なキャシュ技術は、大幅にページのクエリーを高速化します。主要な動作は以下のとおりです:

  1. 検証:ページ割付けや GET や POST から追加された抽出条件以外の単純なクエリは、要求されたデータを含んだページの ID のみを含んで、処理されます。このクエリーはとても限られた JOIN 操作数としか関係しないので、とても高速です。ページを含むファイルの修正時刻がチェックされており、キャッシュよりも新しいバージョンがない場合は、キャッシュが有効とみなされます。別のチェックは存在しないページに対応するキャッシュエントリを削除します。
  2. 構築: キャッシュを再構築する必要がある場合には、完全なクエリが実行されます。しかし、キャッシュファイルが多くなり過ぎるのを防ぐため、同じデータが繰返しキャッシュされるのを防ぐため、ページ割付けの制限やオフセット同様、GET や POST から追加された抽出条件は削除されます。
  3. 保管: キャッシュファイルは、Dokuwiki のキャッシュディレクトリに保管されます。ファイル名は、SQLクエリ文のハッシュ値です。

Dokuwiki purge mechanism を利用してキャッシュを強制的に再構築することができます。

問題点

現状、このプラグインには改善の余地があります。以下は既知の問題点を一部です:

  • テンプレート描画上の循環依存関係を検出できません。
  • テンプレートに相対リンクが含まれる場合、修正されません。
  • テンプレートの描画はキャッシュされません。
  • テンプレートがページの最初のヘッダを与える場合、ページタイトルはヘッダーに応じて更新されていません。
  • インクルードプラグインと同時に使用するといくつか問題があります。
  • 長時間使用しなかったキャッシュファイルを検出し自動的に削除することができません。

しかも、これらの(または他の)問題について将来のリリースで対処する約束はありません。。

謝辞

このプラグインは Martyn Eggleton の dataloop plugin にインスパイヤされました。テンプレートの描画コードの多くの部分は、 Jonathan Arkell の templater plugin が基になっています。

バグ、機能リクエスト、パッチ

バグや機能要求は、最上部のリンクにある課題トラッカーに対して提出してください。

ja/plugin/datatemplate.1346335515.txt.gz · 最終更新: 2012-08-30 16:05 by 125.55.214.60

特に明示されていない限り、本Wikiの内容は次のライセンスに従います: CC Attribution-Share Alike 4.0 International
CC Attribution-Share Alike 4.0 International Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki