DokuWikiのHelperプラグインとして使用し、DokuWikiの持つ各種データへのアクセス方法を提供します。一般のユーザが直接使用することはほとんどないかと思いますが、他のプラグインから間接的に利用されることを想定したものですので、いろいろなことが書いてありますが、プラグイン開発者以外はあまり詳しく読む必要はないでしょう。
さて、datasourceプラグインが対象とするデータは以下のものとなります。
WikiページのMETA情報
索引
最近の変更
履歴
tag情報
mediaファイル
また、DBMSを使用しないDokuWikiですが、DBMSを使った方が都合のよい場合もあります。そんなプラグインのために、独自にDB設定を実装するのでなく、ひとまとめにDB接続を提供する機能もあります。
各プラグインで、必要に応じてdatasourceプラグインのインスタンスを生成し、各APIを呼び出してください。戻り値としてDOMDocumentのオブジェクトが返されるので、適宜変換して使用してください。
$dso = plugin_load('helper', 'datasource');
$dom = $dso->read(<データソース名>);
指定したデータソース名に対応する情報を返します。指定可能なデータソース名は以下となります。
-
wiki:meta
-
DokuWikiページのメタ情報を返します。
-
wiki:index
-
DokuWikiの索引情報を返します。
-
wiki:changes
-
最近の変更を返します。
-
wiki:revisions
-
指定ページの履歴情報を返します。
-
tag:keys
-
tagプラグインのタグ名一覧を返します。これを使用するにはtagプラグインが必要です。
-
tag:list
-
tagプラグインのタグ名とタグ付けされたページの一覧を返します。これを使用するにはtagプラグインが必要です。
-
tag:related
-
tagプラグインの関連タグを返します。これを使用するにはtagプラグインが必要です。
-
media:<zipファイル>
-
メディアファイルとしてアップロードしたzipファイルに含まれるファイル一覧を返します。こちらは実験的な実装となります。
-
その他プラグインによる拡張名
-
他のプラグインがdatasourceプラグインを経由して情報を供給するように拡張することができます。たとえばmboardプラグインは、掲示板のコンテンツをdatasourceプラグインを介して供給し、お好みのフォーマットで出力するといったことが可能です。
ヘルパー機能がメインですが、実際にどのようなデータが取得できるのかを調べるためのマークアップを用意しています。
形式
wiki:meta?id=<ページID>
id .. 表示するページのページID。省略時は現在のページが対象となる。
ソース
<datasource name="wiki:meta"/>
実行結果→クリックで表示
<?xml version="1.0" encoding="UTF-8"?>
<result dsn="wiki:meta">
<code>0</code>
<message>OK</message>
<id>plugin:datasource</id>
<meta>
<date>
<created>1308441108</created>
<modified>1348541398</modified>
</date>
<creator>Kazuyuki Matsuda</creator>
<last_change>
<date>1348541398</date>
<ip>XXX.XXX.XXX.XX</ip>
<type>E</type>
<id>plugin:datasource</id>
<user>xxx</user>
<sum>[マークアップと使用例] </sum>
<extra></extra>
</last_change>
<description>
<tableofcontents>
<item>
<link>#dokuwiki_datasourceプラグイン_-_他のプラグインにデータを供給する</link>
<title>DokuWiki datasourceプラグイン - 他のプラグインにデータを供給する</title>
<type>ul</type>
<level>1</level>
</item>
<item>
<link>#概要</link>
<title>概要</title>
<type>ul</type>
<level>2</level>
</item>
<item>
<link>#使い方</link>
<title>使い方</title>
<type>ul</type>
<level>2</level>
</item>
<item>
<link>#api</link>
<title>API</title>
<type>ul</type>
<level>2</level>
</item>
<item>
<link>#マークアップと使用例</link>
<title>マークアップと使用例</title>
<type>ul</type>
<level>2</level>
</item>
<item>
<link>#動作環境</link>
<title>動作環境</title>
<type>ul</type>
<level>2</level>
</item>
<item>
<link>#ダウンロード</link>
<title>ダウンロード</title>
<type>ul</type>
<level>2</level>
</item>
</tableofcontents>
<abstract>概要
DokuWikiのHelperプラグインとして使用し、DokuWikiの持つ各種データへのアクセス方法を提供します。対象とするデータは以下のものとなります。
* WikiページのMETA情報
* 索引
* 最近の変更
* 履歴
* tag情報
* mediaファイル</abstract>
</description>
<internal>
<cache>1</cache>
<toc>1</toc>
</internal>
<relation>
<toc></toc>
</relation>
</meta>
</result>
ソース
<datasource name="wiki:meta?id=:start"/>
実行結果→クリックで表示
<?xml version="1.0" encoding="UTF-8"?>
<result dsn="wiki:meta?id=:start">
<code>0</code>
<message>OK</message>
<id>:start</id>
<meta>
<date>
<created>1305697289</created>
<modified>1347484378</modified>
</date>
<creator>Kazuyuki Matsuda</creator>
<last_change>
<date>1347484378</date>
<ip>XXX.XXX.XXX.XXX</ip>
<type>E</type>
<id>start</id>
<user>xxx</user>
<sum></sum>
<extra></extra>
</last_change>
<description>
<tableofcontents>
<item>
<link>#有限会社松林堂</link>
<title>有限会社松林堂</title>
<type>ul</type>
<level>1</level>
</item>
<item>
<link>#お知らせ</link>
<title>お知らせ</title>
<type>ul</type>
<level>1</level>
</item>
</tableofcontents>
<abstract>松林堂はコンピュータとネットワークを利用したシステム開発やコンサルティング・サービスを提供いたします。
委託・請負・派遣など、様々な業務形態のご要望にお答えいたします。</abstract>
</description>
<internal>
<cache>1</cache>
<toc>1</toc>
</internal>
<relation>
<toc></toc>
</relation>
</meta>
</result>
形式
wiki:index?ns=<namespace>&sort=<id|iddesc|title|titledesc|mtime|mtimedesc>&excludes=<除外ページ>
ns .. 対象の名前空間。省略時は現在のページの名前空間が対象となる。
sort .. 出力の順序。id:ページIDの昇順、iddesc:ページIDの降順、title:ページタイトルの昇順、
titledesc:ページタイトルの降順、mtime:更新日時の昇順、mtimedesc:更新日時の降順
excludes .. 表示しないページIDのパターン (','区切りで複数可)
ソース
<datasource name="wiki:index?sort=idasc"/>
実行結果→クリックで表示
<?xml version="1.0" encoding="UTF-8"?>
<result dsn="wiki:index?sort=idasc">
<code>0</code>
<message>OK</message>
<namespace>plugin</namespace>
<parent>
<id>start</id>
<title>有限会社松林堂</title>
<url>/start</url>
</parent>
<pages>
<page>
<title>DokuWiki comingsoonプラグイン - ページの所在を隠す</title>
<id>plugin:comingsoon</id>
<type>f</type>
<level>1</level>
<open>1</open>
<url>/plugin/comingsoon</url>
</page>
<page>
<title>DokuWiki gpgプラグイン - Wikiテキストを暗号化して保存する</title>
<id>plugin:gpg</id>
<type>f</type>
<level>1</level>
<open>1</open>
<url>/plugin/gpg</url>
</page>
<page>
<title>DokuWiki indexplorerプラグイン - 索引ページ上でページの移動・リネームを行う</title>
<id>plugin:indexplorer</id>
<type>f</type>
<level>1</level>
<open>1</open>
<url>/plugin/indexplorer</url>
</page>
<page>
<title>DokuWiki ipblockプラグイン - IPアドレスによってアクションを制限する</title>
<id>plugin:ipblock</id>
<type>f</type>
<level>1</level>
<open>1</open>
<url>/plugin/ipblock</url>
</page>
<page>
<title>DokuWiki movetoプラグイン - ページをリダイレクトする</title>
<id>plugin:moveto</id>
<type>f</type>
<level>1</level>
<open>1</open>
<url>/plugin/moveto</url>
</page>
</pages>
</result>
ソース
<datasource name="wiki:index?ns=:&excludes=playground,layout,wiki"/>
実行結果→クリックで表示
<?xml version="1.0" encoding="UTF-8"?>
<result dsn="wiki:index?ns=:&excludes=playground,layout,wiki">
<code>0</code>
<message>OK</message>
<namespace>:</namespace>
<pages>
<page>
<title>plugin</title>
<id>plugin</id>
<type>d</type>
<level>1</level>
<open></open>
<url>/plugin</url>
</page>
<page>
<title>お問い合わせ</title>
<id>contact</id>
<type>f</type>
<level>1</level>
<open>1</open>
<url>/contact</url>
</page>
<page>
<title>カレンダー</title>
<id>calendar</id>
<type>f</type>
<level>1</level>
<open>1</open>
<url>/calendar</url>
</page>
<page>
<title>会社案内</title>
<id>profile</id>
<type>f</type>
<level>1</level>
<open>1</open>
<url>/profile</url>
</page>
<page>
<title>個人情報保護方針</title>
<id>privacy</id>
<type>f</type>
<level>1</level>
<open>1</open>
<url>/privacy</url>
</page>
<page>
<title>利用規約</title>
<id>agreement</id>
<type>f</type>
<level>1</level>
<open>1</open>
<url>/agreement</url>
</page>
<page>
<title>技術資料</title>
<id>library</id>
<type>f</type>
<level>1</level>
<open>1</open>
<url>/library</url>
</page>
<page>
<title>技術資料</title>
<id>library</id>
<type>d</type>
<level>1</level>
<open></open>
<url>/library</url>
</page>
<page>
<title>有限会社松林堂</title>
<id>start</id>
<type>f</type>
<level>1</level>
<open>1</open>
<url>/start</url>
</page>
<page>
<title>業務実績</title>
<id>works</id>
<type>f</type>
<level>1</level>
<open>1</open>
<url>/works</url>
</page>
<page>
<title>業務実績</title>
<id>works</id>
<type>d</type>
<level>1</level>
<open></open>
<url>/works</url>
</page>
<page>
<title>研究開発</title>
<id>research</id>
<type>d</type>
<level>1</level>
<open></open>
<url>/research</url>
</page>
<page>
<title>研究開発</title>
<id>research</id>
<type>f</type>
<level>1</level>
<open>1</open>
<url>/research</url>
</page>
</pages>
</result>
形式
wiki:changes?limit=<N>&ns=<NAMESPACE>&type=<TYPEs>&excludes=<PATTERNs>
limit .. 表示する最大の個数
ns .. 対象とする名前空間
type .. 変更の種類。C:create, E:edit, e:minoredit, D:delete, R:revert (','区切りで複数可)
指定がない場合は、'C,E,R'と見なされる。
excludes .. 表示しないページIDのパターン (','区切りで複数可)
ソース1
<datasource name="wiki:changes?excludes=layout&type=e&limit=3"/>
実行結果1→クリックで表示
<?xml version="1.0" encoding="UTF-8"?>
<result dsn="wiki:changes?excludes=layout&type=e&limit=3">
<code>0</code>
<message>OK</message>
<namespace/>
<changes>
<change>
<title>JavaScriptコードスニペット:IE6でfixed</title>
<date value="1334650092" Y="2012" m="04" d="17" H="17" i="08" s="12">
<date>2012-04-17</date>
<time>17:08:12</time>
</date>
<ip>XXX.XXX.XXX.XXX</ip>
<type>e</type>
<id>research:1308815194</id>
<user>xxx</user>
<sum>[JavaScriptコードスニペット:IE6でfixed] </sum>
<extra></extra>
<perms>255</perms>
<md_and_title>04/17 JavaScriptコードスニペット:IE6でfixed</md_and_title>
<url>/research/1308815194</url>
</change>
<change>
<title>研究開発</title>
<date value="1334552236" Y="2012" m="04" d="16" H="13" i="57" s="16">
<date>2012-04-16</date>
<time>13:57:16</time>
</date>
<ip>XXX.XXX.XXX.XXX</ip>
<type>e</type>
<id>research</id>
<user>xxx</user>
<sum>[研究レポート] </sum>
<extra></extra>
<perms>255</perms>
<md_and_title>04/16 研究開発</md_and_title>
<url>/research</url>
</change>
<change>
<title>Webサイトをスマートフォン対応にする</title>
<date value="1334524195" Y="2012" m="04" d="16" H="06" i="09" s="55">
<date>2012-04-16</date>
<time>06:09:55</time>
</date>
<ip>XXX.XXX.XXX.XXX</ip>
<type>e</type>
<id>research:1332291593</id>
<user>xxx</user>
<sum>[方針] </sum>
<extra></extra>
<perms>255</perms>
<md_and_title>04/16 Webサイトをスマートフォン対応にする</md_and_title>
<url>/research/1332291593</url>
</change>
</changes>
</result>
ソース2
<datasource name="wiki:changes?limit=5&excludes=layout"/>
実行結果2→クリックで表示
<?xml version="1.0" encoding="UTF-8"?>
<result dsn="wiki:changes?limit=5&excludes=layout">
<code>0</code>
<message>OK</message>
<namespace/>
<changes>
<change>
<title>有限会社松林堂</title>
<date value="1347484378" Y="2012" m="09" d="13" H="06" i="12" s="58">
<date>2012-09-13</date>
<time>06:12:58</time>
</date>
<ip>XXX.XXX.XXX.XXX</ip>
<type>E</type>
<id>start</id>
<user>xxx</user>
<sum></sum>
<extra></extra>
<perms>255</perms>
<md_and_title>09/13 有限会社松林堂</md_and_title>
<url>/start</url>
</change>
<change>
<title>JavaScriptコードスニペット:Webページを丸ごと1ファイルにする</title>
<date value="1335237235" Y="2012" m="04" d="24" H="12" i="13" s="55">
<date>2012-04-24</date>
<time>12:13:55</time>
</date>
<ip>XXX.XXX.XXX.XXX</ip>
<type>E</type>
<id>research:1309832567</id>
<user>xxx</user>
<sum></sum>
<extra></extra>
<perms>255</perms>
<md_and_title>04/24 JavaScriptコードスニペット:Webページを丸ごと1ファイルにする</md_and_title>
<url>/research/1309832567</url>
</change>
<change>
<title>AntDriver - AntでWebをテストする</title>
<date value="1334552831" Y="2012" m="04" d="16" H="14" i="07" s="11">
<date>2012-04-16</date>
<time>14:07:11</time>
</date>
<ip>XXX.XXX.XXX.XXX</ip>
<type>E</type>
<id>research:1333937374</id>
<user>xxx</user>
<sum>[threadタスク] </sum>
<extra></extra>
<perms>255</perms>
<md_and_title>04/16 AntDriver - AntでWebをテストする</md_and_title>
<url>/research/1333937374</url>
</change>
<change>
<title>XmlDriver - WebDriverをXMLから呼び出す</title>
<date value="1333937439" Y="2012" m="04" d="09" H="11" i="10" s="39">
<date>2012-04-09</date>
<time>11:10:39</time>
</date>
<ip>XXX.XXX.XXX.XXX</ip>
<type>E</type>
<id>research:1333928078</id>
<user>xxx</user>
<sum></sum>
<extra></extra>
<perms>255</perms>
<md_and_title>04/09 XmlDriver - WebDriverをXMLから呼び出す</md_and_title>
<url>/research/1333928078</url>
</change>
</changes>
</result>
形式
ソース
<datasource name="wiki:revisions"/>
実行結果→クリックで表示
<?xml version="1.0" encoding="UTF-8"?>
<result dsn="wiki:revisions">
<code>0</code>
<message>OK</message>
<id>plugin:datasource</id>
<revisions>
<revision rev="1348541306">
<date value="1348541306" Y="2012" m="09" d="25" H="11" i="48" s="26">
<date>2012-09-25</date>
<time>11:48:26</time>
</date>
<ip>XXX.XXX.XXX.XXX</ip>
<type>E</type>
<id>plugin:datasource</id>
<user>xxx</user>
<sum>[マークアップと使用例] </sum>
<extra></extra>
</revision>
<revision rev="1348540977">
<date value="1348540977" Y="2012" m="09" d="25" H="11" i="42" s="57">
<date>2012-09-25</date>
<time>11:42:57</time>
</date>
<ip>XXX.XXX.XXX.XXX</ip>
<type>E</type>
<id>plugin:datasource</id>
<user>xxx</user>
<sum></sum>
<extra></extra>
</revision>
<revision rev="1348540913">
<date value="1348540913" Y="2012" m="09" d="25" H="11" i="41" s="53">
<date>2012-09-25</date>
<time>11:41:53</time>
</date>
<ip>XXX.XXX.XXX.XXX</ip>
<type>E</type>
<id>plugin:datasource</id>
<user>xxx</user>
<sum></sum>
<extra></extra>
</revision>
<revision rev="1348540727">
<date value="1348540727" Y="2012" m="09" d="25" H="11" i="38" s="47">
<date>2012-09-25</date>
<time>11:38:47</time>
</date>
<ip>XXX.XXX.XXX.XXX</ip>
<type>E</type>
<id>plugin:datasource</id>
<user>xxx</user>
<sum>[ダウンロード] </sum>
<extra></extra>
</revision>
<revision rev="1348540526">
<date value="1348540526" Y="2012" m="09" d="25" H="11" i="35" s="26">
<date>2012-09-25</date>
<time>11:35:26</time>
</date>
<ip>XXX.XXX.XXX.XXX</ip>
<type>E</type>
<id>plugin:datasource</id>
<user>xxx</user>
<sum>[ダウンロード] </sum>
<extra></extra>
</revision>
<revision rev="1348540505">
<date value="1348540505" Y="2012" m="09" d="25" H="11" i="35" s="05">
<date>2012-09-25</date>
<time>11:35:05</time>
</date>
<ip>XXX.XXX.XXX.XXX</ip>
<type>E</type>
<id>plugin:datasource</id>
<user>xxx</user>
<sum>[ダウンロード] </sum>
<extra></extra>
</revision>
<revision rev="1348540455">
<date value="1348540455" Y="2012" m="09" d="25" H="11" i="34" s="15">
<date>2012-09-25</date>
<time>11:34:15</time>
</date>
<ip>XXX.XXX.XXX.XXX</ip>
<type>E</type>
<id>plugin:datasource</id>
<user>xxx</user>
<sum></sum>
<extra></extra>
</revision>
<revision rev="1348540049">
<date value="1348540049" Y="2012" m="09" d="25" H="11" i="27" s="29">
<date>2012-09-25</date>
<time>11:27:29</time>
</date>
<ip>XXX.XXX.XXX.XXX</ip>
<type>E</type>
<id>plugin:datasource</id>
<user>xxx</user>
<sum>[マークアップと使用例] </sum>
<extra></extra>
</revision>
<revision rev="1348539642">
<date value="1348539642" Y="2012" m="09" d="25" H="11" i="20" s="42">
<date>2012-09-25</date>
<time>11:20:42</time>
</date>
<ip>XXX.XXX.XXX.XXX</ip>
<type>E</type>
<id>plugin:datasource</id>
<user>xxx</user>
<sum>[マークアップと使用例] </sum>
<extra></extra>
</revision>
<revision rev="1348539146">
<date value="1348539146" Y="2012" m="09" d="25" H="11" i="12" s="26">
<date>2012-09-25</date>
<time>11:12:26</time>
</date>
<ip>XXX.XXX.XXX.XXX</ip>
<type>E</type>
<id>plugin:datasource</id>
<user>xxx</user>
<sum>[マークアップ] </sum>
<extra></extra>
</revision>
</revisions>
</result>
ソース
<datasource name="wiki:revisions?id=:"/>
実行結果→クリックで表示
<?xml version="1.0" encoding="UTF-8"?>
<result dsn="wiki:revisions?id=start">
<code>0</code>
<message>OK</message>
<id>start</id>
<revisions>
<revision rev="1335174329">
<date value="1335174329" Y="2012" m="04" d="23" H="18" i="45" s="29">
<date>2012-04-23</date>
<time>18:45:29</time>
</date>
<ip>XXX.XXX.XXX.XXX</ip>
<type>e</type>
<id>start</id>
<user>xxx</user>
<sum>[お知らせ] </sum>
<extra></extra>
</revision>
<revision rev="1334524337">
<date value="1334524337" Y="2012" m="04" d="16" H="06" i="12" s="17">
<date>2012-04-16</date>
<time>06:12:17</time>
</date>
<ip>XXX.XXX.XXX.XXX</ip>
<type>e</type>
<id>start</id>
<user>xxx</user>
<sum>[お知らせ] </sum>
<extra></extra>
</revision>
<revision rev="1334523996">
<date value="1334523996" Y="2012" m="04" d="16" H="06" i="06" s="36">
<date>2012-04-16</date>
<time>06:06:36</time>
</date>
<ip>XXX.XXX.XXX.XXX</ip>
<type>e</type>
<id>start</id>
<user>xxx</user>
<sum>[お知らせ] </sum>
<extra></extra>
</revision>
<revision rev="1334523213">
<date value="1334523213" Y="2012" m="04" d="16" H="05" i="53" s="33">
<date>2012-04-16</date>
<time>05:53:03</time>
</date>
<ip>XXX.XXX.XXX.XXX</ip>
<type>e</type>
<id>start</id>
<user>xxx</user>
<sum>[お知らせ] </sum>
<extra></extra>
</revision>
<revision rev="1333920514">
<date value="1333920514" Y="2012" m="04" d="09" H="06" i="28" s="34">
<date>2012-04-09</date>
<time>06:28:34</time>
</date>
<ip>XXX.XXX.XXX.XXX</ip>
<type>E</type>
<id>start</id>
<user>xxx</user>
<sum></sum>
<extra></extra>
</revision>
<revision rev="1332421906">
<date value="1332421906" Y="2012" m="03" d="22" H="22" i="11" s="46">
<date>2012-03-22</date>
<time>22:11:46</time>
</date>
<ip>XXX.XXX.XXX.XXX</ip>
<type>e</type>
<id>start</id>
<user>xxx</user>
<sum>更新に表示させない</sum>
<extra></extra>
</revision>
<revision rev="1332295767">
<date value="1332295767" Y="2012" m="03" d="21" H="11" i="09" s="27">
<date>2012-03-21</date>
<time>11:09:27</time>
</date>
<ip>XXX.XXX.XXX.XXX</ip>
<type>E</type>
<id>start</id>
<user>xxx</user>
<sum></sum>
<extra></extra>
</revision>
<revision rev="1318591949">
<date value="1318591949" Y="2011" m="10" d="14" H="20" i="32" s="29">
<date>2011-10-14</date>
<time>20:32:29</time>
</date>
<ip>XXX.XXX.XXX.XXX</ip>
<type>E</type>
<id>start</id>
<user>xxx</user>
<sum></sum>
<extra></extra>
</revision>
<revision rev="1309763339">
<date value="1309763339" Y="2011" m="07" d="04" H="16" i="08" s="59">
<date>2011-07-04</date>
<time>16:08:59</time>
</date>
<ip>XXX.XXX.XXX.XXX</ip>
<type>e</type>
<id>start</id>
<user>xxx</user>
<sum>小変更チェックしなおし</sum>
<extra></extra>
</revision>
<revision rev="1309763210">
<date value="1309763210" Y="2011" m="07" d="04" H="16" i="06" s="50">
<date>2011-07-04</date>
<time>16:06:50</time>
</date>
<ip>XXX.XXX.XXX.XXX</ip>
<type>E</type>
<id>start</id>
<user>xxx</user>
<sum>[お知らせ] </sum>
<extra></extra>
</revision>
</revisions>
</result>
|