文書の過去の版を表示しています。
目次
データテンプレートプラグイン
この拡張は二年以上更新されていません。もはや維持管理や対応がされておらず、互換性に問題がある可能性があります。
This extension is not in the 'plugin' or 'template' namespace and is therefore ignored.
このプラグインは、データプラグインの構造化データを、テンプレートを使用して表示する機能を追加します。 テンプレートは、データ入力や複数の入力のリストに対して個々に適用できます。 更に、このプラグインは、検索フォーム・ページ割付け・結果のキャッシュを提供します。
ダウンロードとインストール
変更履歴
- フィードの取得中にエラーが発生しました:http://github.com/feeds/ccl/commits/dokuwiki-plugin-datatemplate/master
テンプレート定義
テンプレートは、プレースホルダを含む別の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
パラメータに与えられた名前を使用する必要があることに注意してください。
上記のように、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 は、データプラグインやデータテンプレートプラグインに新機能を追加します。すでに datatable
、datalist
、datatemplatelist
が含まれるページで使用できます。構文例は次のようになります:
---- 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 の単純なキャシュ技術は、大幅にページのクエリーを高速化します。主要な動作は以下のとおりです:
- 検証:ページ割付けや GET や POST から追加された抽出条件以外の単純なクエリは、要求されたデータを含んだページの ID のみを含んで、処理されます。このクエリーはとても限られた JOIN 操作数としか関係しないので、とても高速です。ページを含むファイルの修正時刻がチェックされており、キャッシュよりも新しいバージョンがない場合は、キャッシュが有効とみなされます。別のチェックは存在しないページに対応するキャッシュエントリを削除します。
- 構築: キャッシュを再構築する必要がある場合には、完全なクエリが実行されます。しかし、キャッシュファイルが多くなり過ぎるのを防ぐため、同じデータが繰返しキャッシュされるのを防ぐため、ページ割付けの制限やオフセット同様、GET や POST から追加された抽出条件は削除されます。
- 保管: キャッシュファイルは、Dokuwiki のキャッシュディレクトリに保管されます。ファイル名は、SQLクエリ文のハッシュ値です。
Dokuwiki purge mechanism を利用してキャッシュを強制的に再構築することができます。
問題点
現状、このプラグインには改善の余地があります。以下は既知の問題点を一部です:
- テンプレート描画上の循環依存関係を検出できません。
- テンプレートに相対リンクが含まれる場合、修正されません。
テンプレートの描画はキャッシュされません。テンプレートがページの最初のヘッダを与える場合、ページタイトルはヘッダーに応じて更新されていません。- インクルードプラグインと同時に使用するといくつか問題があります。
- 長時間使用しなかったキャッシュファイルを検出し自動的に削除することができません。
しかも、これらの(または他の)問題について将来のリリースで対処する約束はありません。。
謝辞
このプラグインは Martyn Eggleton の dataloop plugin にインスパイヤされました。テンプレートの描画コードの多くの部分は、 Jonathan Arkell の templater plugin が基になっています。
バグ、機能リクエスト、パッチ
バグや機能要求は、最上部のリンクにある課題トラッカーに対して提出してください。