include_template.inc.php

サマリ指定したページをテンプレートにして、パラメータリストのデータを表示する。(MediaWikiのtemplateを模したもの)
リビジョン1.21
対応バージョン1.4.7
投稿者kahata
投稿日2007-05-06 (日) 09:27:43
プラグイン include_template
指定したページをテンプレートにして、パラメータリストのデータを表示する。 Validation Check, セキュリティー面のチェックは各自で行うこと。
ライセンス
基本的にはGNU General Public License(GPL)ですが、自由に配布・利用・改造してかまいません。
本pluginを利用して発生する危険、損害については当方は一切の責任を負いません。
全て自己リスクでお使い下さい。

書式

ブロック型プラグイン

#include_template(テンプレートページ名[,title|,notitle])[{{
 キー1 = 値1
 キー2 = 値2
 ........
}}]
テンプレートのページ
・wikiページで値を表示する場所に{{{キー}}}を記入する。

コマンド(アクション)型プラグイン

wikiページに下記のようなリンクを貼ると、データ置換されたテンプレートが『特別ページ』に表示される。

[[見出し:http://(wikiのサイト)/wiki/index.php?cmd=include_template&template=テンプレートページ名&id=データ識別子]]
 
データのページ
データのページ(デフォルトは :config/plugin/include_template/data) に以下のデータを1データ/1行で記入する。
(id=データ識別子 は必須)
id=データ識別子<>title=タイトル<>キー1=値1<>キー2=値2<>........<>キーn=値n<>(改行)

使用例

wikiページ(プラグイン埋め込みページ)の記述
#include_template(テンプレートページ名){{
名前 = ○田△夫
郵便番号 = xxx-yyyy
住所 = 東京都×××××××××
電話 = 01-1234-4567
}}
テンプレートページの例1(template/jusho)
|名前|郵便番号|住所|電話|
|{{{名前}}}|{{{郵便番号}}}|{{{住所}}}|{{{電話}}}|
==noinclude==
この間はtemplate/jushoでのみ表示され、plugin埋め込みページには表示されません。
==/noinclude==
テンプレートページの例2(html/jusho)
<table>
 <tr>
   <td>名前</td>
   <td>郵便番号</td>
   <td>住所</td>
   <td>電話</td>
  </tr>
 <tr>
   <td>{{{名前}}}</td>
   <td>{{{郵便番号}}}</td>
   <td>{{{住所}}}</td>
   <td>{{{電話}}}</td>
 </tr>
</table>
==noinclude==
この間はhtml/jushoでのみ表示され、plugin埋め込みページには表示されません。
==/noinclude==

ダウンロード

include_template1.21.zip

インストールの方法

  • 上記ファイルをダウンロードし解凍して出来たinclude_template.inc.phpをpluginのディレトリーに置いて下さい。
  • pukiwiki.ini.phpのPKWKEXP_DISABLE_MULTILINE_PLUGIN_HACKを0に設定して下さい。
    define('PKWKEXP_DISABLE_MULTILINE_PLUGIN_HACK', 0); // 1 = Disabled

更新履歴

 

日時リビジョン内容
2007-04-271.00初版公開
2007-05-061.10#includeと互換性を持たせて機能を拡充した
2007-05-201.11==noinclude==~==/noinclude== 最長一致bug fix
2007-05-201.12テンプレートページでテンプレート部分を非表示にするためのパッチ当て
2007-06-071.13==onlyinclude==~==/onlyinclude== を追加
2007-06-161.14前処理でテンプレートページの原文を置換する機能をを追加
2008-02-071.20コマンド(アクション)型を追加
2008-07-191.21複数行引数不可の場合の対応、phpコードの実行
  • include.inc.phpをベースにpara_template.inc.phpを全面改訂いたしました。
    プラグイン名をわかりやすい include_templateに変更しました。-- kahata 2007-04-27 (金) 17:36:03
  • valueの値に &"'<> などの文字が使えるようにbug fixしました。 -- kahata 2007-04-30 (月) 08:38:33
  • #includeと上位互換性を持たせて機能を拡充しました。 -- kahata 2007-05-06 (日) 09:58:55
    1. 複数行にわたる引数({{key = value ....}})を省略すると、#include と同様に機能します。
      (defaultはnotitle)
    2. 先頭にhtmlが付いたテンプレートページはhtmlソースコードとして処理されてインクルードされます。
      (sonotsさんの#htmlinsert#htmlをwikiページで実現した機能)
    3. セキュリティー保護上、テンプレートページを凍結しなければ作動しないように設定しています。(default)plugin埋め込みページも凍結することが好ましいです。
    4. 詳細はソースをご参照下さい。
  • ==noinclude==~==/noinclude== の最長一致正規表現を最短一致にバグフィックスしました。
    複数個の==noinclude==~==/noinclude==を設置することが可能になりました。-- kahata 2007-05-20 (日) 08:13:55
  • 欲しいプラグイン/300にある、teananさんのパッチを当てるとテンプレートページでテンプレート記載部分を非表示にできます。(MediaWikiの<includeonly>機能)
    これに対応して#hide(on)/#hide(off)が使えるようにパッチを当てました。2007-05-20 (日) 21:48:25
  • テンプレートページで==noinclude==と==/noinclude==を非表示にしたい場合のために、//==noinclude==と//==/noinclude==が使えるようにしました。間に合わせのパッチ当てです。
  • ==onlyinclude==~==/onlyinclude== を追加しました。
    これは丁度 ==noinclude==~==/noinclude==の逆で、==onlyinclude==と==/onlyinclude==で挟まれた部分のみをインクルードします。(上記<includeonly>の機能と異なるので注意)
  • ver1.14 {{%キー% = 値}} とすることで、テンプレートページの原文を前処理置換する機能を追加しました。 -- 2007-06-16 (土) 11:44:27
    例えば、以下のようなテンプレートページ(template/test)で・・・
    今上陛下は{{{天皇}}}です。~
    今の首相は福田康夫です。
    埋め込みページに以下のプラグインを埋め込むと
    #include_template(template/test){{
    天皇 = 平成天皇
    %今の% = 前の
    %福田康夫% = 阿部晋三
    }}
    以下のように表示されます。
    今上陛下は平成天皇です。
    前の首相は阿部晋三です。

使用頻度は少ないかもしれませんが、テンプレートページの原文をいじりたくなく、どうしても一時的にプラグイン側で操作して変更したい時のために・・・・

  • %が使えるように%~%の正規表現を最長一致にbug fixしましたので上記の最新版をダウンロードして下さい。 -- kahata 2007-06-16 (土) 16:18:02
  • Ver1.20 コマンド(アクション)型を追加しました。テンプレートの内容を「特別ページ」に表示します。-- kahata 2008-02-07 (木) 14:30:02
  • Ver1.21 複数行引数不可の対応、phpコードの実行を追加しました。 -- kahata 2008-07-19 (土) 16:15:02
    1. versionが古いなどの事情で複数行引数が使用不可の場合は、key=valueのパラメータリストを<>で繋いで一行にして最後の引数にすると作動します。
    2. 定数、PLUGIN_INCLUDE_TEMPLATE_ALLOW_EVALをTrueにすると、先頭にphpが付いたテンプレートページはphpソースコードとして処理されてインクルードされます。(この機能は危険が伴うため、公開サーバー上での使用はお勧めできません。)

アンケート

  • このプラグインを使用していますか?一人1回のみ投票して下さい。
    選択肢投票
    使用している6
  • このプラグインに満足しておりますか?
    選択肢投票
    はい3
    いいえ2
  • 「いいえ」に投票した方に質問です。
    どのような修正を加えれば、よくなると思いますか?下記のコメントに記入して下さい。

コメント

コメントをどうぞ

  • 値内に改行を使えるようになるとありがたいです。para_時は&br;が使用できたのですが。 -- たらこせる 2007-05-08 (火) 15:36:54
    • コメントありがとうございます。新版では&を&amp;に置き換えます。
      定数、PLUGIN_INCLUDE_TEMPLATE_ALLOW_TAGをTRUEにすると元に戻り&br;が使えます。
      但しこのときは<を&lt;などと書く必要があるかもしれません。(安全性と利便性は裏腹のようで) -- kahata 2007-05-08 (火) 19:53:34
  • (テンプレートページ名) ここ {{  ←の括弧の間にスペースが入っていると作動しないので注意!動作せず、調べるのに時間がかかった -- 便利そうだけど、最初動かず? 2007-05-30 (水) 01:01:10
    • 説明書きのミス大変失礼しました。訂正ありがとうございました。 -- kahata 2007-05-30 (水) 04:47:19
  • 公共への影響を考慮し、本プラグインを強化/サポートするプラグイン類は削除しました。*1*2 -- kahata 2007-06-22 (金) 04:45:00
  • henohenoさん、muthfuncほか一連のプラグインの削除に関し丁寧なフォローをありがとうございます。私自身も特に明確な危険性を認識しているわけでないですが、何分素人の作品で与える影響が未知なためひとまず取り下げました。
    Smartyを使えば取り下げた機能は殆ど実現できると思います。Smartyの本体に組み込みを考えていただけるとありがたいです。(プラグインのみならずモジュール機能の実現)
    尚取り下げたプラグイン類の控えは手元にありますので復活は可能です。 -- kahata 2007-06-25 (月) 01:01:50
  • utf-8では使えないのでしょうか -- 2007-07-22 (日) 16:35:39
    • プログラムで文字コードをeuc-jpに特定している所はないのですが作動しないですか?コメントを日本語(euc-jp)で入れていますので、それが原因かもしれません。以下をお試し頂き作動報告をお願いします。 -- kahata 2007-07-23 (月) 02:42:34

      include_template_1.14_utf8.zip

  • 2007-07-24にutf8が原因でなく呼び出すだけで白紙のページが表示されるとの削除コメントがありましたがそのような現象が他にもあればご報告ください。 -- kahata 2007-08-16 (木) 20:29:30
  • 引数にテンプレートを呼び出すページの名前を入れることはできませんか? &fpage;が使えないのですが・・・ -- qqq? 2008-06-21 (土) 17:56:52
  • 上の問題は自己解決したのですが(rules.ini.phpを利用)、もう1つ質問です。#include_template(Template){{キー1=値1}}をまとめて1行で書くことはできませんか? -- qqq? 2008-06-22 (日) 11:36:13
    • 対応が遅くなりましたがver1.21をお試しください。 -- kahata 2008-07-19 (土) 16:09:31
  • Yahooブリーフケースの有料化に伴い、添付ファイルが削除されたようです。 -- 2009-03-11 (水) 12:01:08
    • upload先を変更しました。
  • 全ての値がキー1に代入されてしまうのですが、これは何が原因なんでしょうか? -- 2009-07-24 (金) 15:27:20
  • 「PKWKEXP_DISABLE_MULTILINE_PLUGIN_HACKを0」にしても、改行をbrに変換しなくても駄目でした・・・・結局改行時に<>を入れる方法使ってますが、なんでなのか -- 2009-07-27 (月) 08:47:09
    • さしあたり当方で一応正常に作動しているものに差し替えましてのでお試しください。
      今はちょっと原因究明の余裕がありません。ダウンロード先を変えたときになにか手違いがあったかもしれません?????? -- kahata 2009-07-29 (水) 21:47:49
  • 差し替えましたところ問題なく動作しました。ファイルを見比べてみると207行、275行、325行あたりが変更されていました。ありがとうございます。 -- 2009-07-30 (木) 11:25:21


以下は過去のログ

  • Value内に=が入るときちんと読み取らないようです。 -- たらこせる 2007-04-26 (木) 15:11:00
    • ご指摘ありがとうございます。複数の=があると、そこで分割されるので、少し分割の方法を考えて見ます。よいアイデアがあれば教えてください。 -- kahata 2007-04-26 (木) 15:37:58
  • explode の第3引数に 2 をつけましょう。http://jp.php.net/explode -- 2007-04-26 (木) 15:50:14
  • なぜ最後に euc-jp に変換しているの? utf8 版の場合は?最後の処理はいらないでしょう。 -- 2007-04-26 (木) 15:55:29
  • 現状ではおそらく $tpl の値に例えば ../../.htpasswd のように親ディレクトリへのパスを指定できてしまうのでどんなファイルでも参照できてしまい、危険かと思います。 -- 2007-04-26 (木) 15:57:24
    • ごめん。この処理いらないですね。get_source だけで大丈夫です。-- 2007-04-27 (金) 02:45:27
  • ご指摘のとおりmb_convert_encoding()は要りません。親ディレトリ参照禁止は、sonotsさんのhtmlinsert.inc.php を参考にpacth当てして下さい。 (上記のソースは直しています)-- kahata 2007-04-26 (木) 16:07:21
  • ページのテキストファイル取り込みをPukiWiki内部関数のget_sourceに変えました。これなら原始的なfile()に比べてセキュリティー面で少しは安全かな?と思いますが如何でしょうか? -- kahata 2007-04-26 (木) 19:54:38
  • このプラグインで自身のページを呼ぶと無限ループになると思います。対策が必要かもしれません。include プラグインを参考にしてみてください。 -- 2007-04-26 (木) 21:30:44
  • 追加:参照制限のかかっているページも取り込めてしまいます。これも include プラグインを参考にしてみてください。基本的に include プラグインを参考にするとよさそうです。せっかくのオープンソースなので既存のソースから学びましょう。がんばってください。 -- 2007-04-27 (金) 02:45:27
    • これも大事なことですね。結果的にオリジナルと姿形が変わった物になるかもしれませんが頑張ってみます。 -- kahata 2007-04-27 (金) 08:42:45
    • 上のコメントの続きですがinclude.inc.phpを見ています。さすがによくできています。やはり「ホンモノ」は違います。このプラグインを「ホンモノ」にするにはinclude.inc.phpをベースに書き直したほうがよさそうです。

*1 ある工夫をすれば、PHPのテンプレートエンジン Smartyが、htmlコードベースのテンプレートに利用できることが判りました。従って今までの強化・サポートのプラグインを開発する必要がなくなりました。自作プラグイン/include_module.inc.phpにその例を示します。願わくばpukiwiki本体にこの機能が組み込まれることを期待します。
*2 要点は (1)assignでテンプレート変数を設定すること、(2)テンプレートエンジンを駆動した結果をfetchで文字列として取得すること の2点です

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-07-14 (日) 21:25:58
Site admin: PukiWiki Development Team

PukiWiki 1.5.2+ © 2001-2019 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u7. HTML convert time: 0.368 sec.

OSDN