include_module.inc.php

サマリSmartyによるモジュール開発用プラグイン試行版
リビジョン1.22
対応バージョン1.4.7
投稿者kahata
投稿日2007-06-24 (日) 22:52:58
プラグイン include_module
PHPのSmartyのテンプレート*1を機能を用いた、モジュールをインクルードする。
このプラグインはpukiwukiで、PHPテンプレートエンジン、Smartyによるモジュールの開発を期待してSmartyの使い方を例示したプラグインです。*2
願わくばwiki本体にSmartyが組み込まれ、xoopsのようなモジュール開発の環境が整うことを期待します。
Smartyに関する知識があり、且つプラグインのPHPソースコードの妥当性を評価できる方以外は本プラグインを使用しないで下さい。(知識不十分なまま誤用や悪用がないよう公共性に配慮していますので、不親切な説明ですがご了解下さい)
Validation Check, セキュリティー面のチェックは各自で行うこと。
ライセンス
基本的にはGNU General Public License(GPL)ですが、自由に配布・利用・改造してかまいません。
本pluginを利用して発生する危険、損害については当方は一切の責任を負いません。
全て自己リスクでお使い下さい。
書式
#include_module([サブディレクトリ名/]モジュール名[,引数2,引数3,.....引数n])[{{
 モジュールに引き渡すパラメータ(データ類など)の記述
 ........
}}]

使用例

wikiページ(プラグイン埋め込みページ)の記述
#include_module(template, jusho_pkwk,wiki){{
name = ○田△夫
zip = xxx-yyyy
address = 東京都×××××××××
phone = 01-1234-4567
}}

ここに 
第1引数 template: ver1.00のテンプレート機能を実現するモジュール名
第2引数 jusho_pkwk: Smartyテンプレートエンジンのテンプレート(ファイル)名
第3引数 wiki: wiki書式を可能にするためのオプション
Smarty テンプレートファイル jusho_pkwk.tpl
{* Smarty  住所録サンプル pukiwiki *}

CENTER:住所録
|CENTER:名前|CENTER:郵便番号|CENTER:住所|CENTER:電話番号|h
|{$data.name}|{$data.zip}|{$data.address}|{$data.phone}|

出力結果

住所録
名前郵便番号住所電話番号
○田△夫xxx-yyyy東京都×××××××××01-1234-4567

ダウンロード

悪意あるURLの変更がありましたので、このページでの提供を取止めます。
下記の実稼動サンプルのページからダウンロードして下さい。

インストールの方法

  • 上記ファイルをダウンロードし解凍して出来たinclude_module.inc.phpをpluginのディレトリーに置いて下さい。
  • pukiwiki.ini.phpのPKWKEXP_DISABLE_MULTILINE_PLUGIN_HACKを0に設定して下さい。
    define('PKWKEXP_DISABLE_MULTILINE_PLUGIN_HACK', 0); // 1 = Disabled
  • 上記使用例を出力するためのファイル類をを同梱しています。
    解凍してできたmodulesのディレクトリを、それぞれのPHPとSmartyのインストール環境に合わせて、適切な場所においてください。
    (defaultはwiki(DATA_HOME)直下のサブディレクトリ wiki/modules/)

更新履歴

日時リビジョン内容
2007-06-241.00初版公開 Smartyのテンプレート機能のみ実現
2007-06-271.10広く一般的に、PHPコードで記述されたモジュールをインクルードするよう強化
2007-06-281.20modulesに置かれたモジュールでget,postの使用を可能にしました
2007-07-011.21post先を元のmodules関数にして、分岐処理を行うよう変更した
2007-07-161.22modulesのサブディレクトリに置かれたmoduleの使用を可能にしました

実稼動サンプル

公開サーバ上で実際に稼動しているサンプルを以下のサイトに置きましたのでご覧下さい。

  1. モジュール template事例(template)実稼動サンプル
  2. モジュール comment事例(comment)実稼動サンプル
  3. include_module/活用事例1(flower)実稼動サンプル
  4. include_module/活用事例2(column)実稼動サンプル
  5. 活用事例3(admin)実稼動サンプル 管理者認証を行う。
  6. 活用事例4(form)実稼動サンプル 投稿用フォームを表示する。
  7. 活用事例5(bbs)実稼動サンプル 画像掲示板 2007-08-01 (水) 06:47:07

コメント

  • 思い切って公開しました。これはpluginとしての利用例ですが。wiki本体でSmartyが使えるようになると、xoopsのような本格的なモジュールがwikiで開発できると思います。 -- kahata 2007-06-25 (月) 00:02:54
  • henohenoさん、muthfuncほか一連のプラグインの削除に関し丁寧なフォローをありがとうございます。私自身も特に明確な危険性を認識しているわけでないですが、何分素人の作品で与える影響が未知で自信がないので一旦取り下げました。
    Smartyを使えば取り下げた機能は殆ど実現できると思います。*3Smartyの本体に組み込みを考えていただけるとありがたいです。(プラグインのみならずモジュール機能の実現)
    尚取り下げたプラグイン類の控えは手元にありますので復活は可能です。 -- kahata 2007-06-25 (月) 01:01:50
  • 一応、optionのwikiを付けることでpukiwiki書法のテンプレートも使えるようにしました。( リヴィジョンアップするほどの事もないので最新版をダウンロードして下さい)
    但し現状ではSmarty のデフォルトの デリミタ である { と } を使用するときに問題が発生しますので&hoge(){};のプラグインはそのままでは使えません。マニュアルを参考にして回避して下さい。具体的には、例えば
    &color(red){ldelim}赤です{rdelim}; 
    と書くとちゃんと機能します。 -- kahata 2007-06-25 (月) 10:40:04
  • ver1.10の変更点 -- kahata 2007-06-27 (水) 08:31:54
    1. #include_moduleプラグインをモジュールのフックとして活用することにより各種のPHPコードで記述された一般的なモジュールをインクルードするように強化しました。
    2. 書式は第1引数にモジュール名を指定すること以外は自由書式です。各モジュールの仕様に合せて設定して下さい。
    3. モジュール名にtemplateを指定することにより、ver1.00のテンプレート機能が実現できます(使用例参照)
    4. テンプレート機能のみ実現する時のためにver1.00も残しておきます。
    • 当然ですが、このプラグインはプラグイン側からモジュールを呼び出しているだけなので、掲示板などget,postを使った本格的なモジュールは独立したアプリケーションとしてコードを記述する必要があります。
      ver1.00で例示したようにplugin自体にSmartyを使うことは可能で、そのプラグイン独自のスタイル(テンプレート)をデザインできます。($script等が使えるpluginの方が楽かも) -- kahata 2007-06-27 (水) 13:10:36
    • もう少し説明するとget、postによるメッセージ受送信部分は#comment、#articleを参考にしルックス/スタイルをSmartyで設計すると、通常のHPで見受ける美しい掲示板のプラグインができます。
  • ver1.20の変更点 -- kahata 2007-06-28 (木) 15:11:54
    モジュールから送信されたpost,getを一旦プラグイン#include_moduleで受け止めてモジュール内の関数にコールバックすることによってモジュールでのpost,getによる受送信を可能にしました。
    要点は以下の通りです。
    1. モジュールファイル内で実行するアクションプログラムの関数名を以下のようにします。
      function module_モジュール名_action(){} (Ver1.21 post先を元のモジュール関数(module_モジュール名)にしました。以下参照)
    2. postするフォームのタグを以下のようにします。
       <input type="hidden" name="plugin" value="include_module" />
       <input type="hidden" name="module" value="[サブディレクトリ名/]モジュール名" />
    3. 以上によりPluginと全く同様の感覚で、#comment,#articleのような掲示板的なモジュールを作成することができるようになりました。(上記1.10の懸念は解決しました)
  • ver1.21の変更点 -- kahata 2007-07-01 (日) 10:21:54
    post先を元のモジュール関数に変更し、モジュール関数内で処理するようにしました。
    従って、postしたアクションを実行する関数(module_モジュール名_action())の設置が必要なくなりました。
    モジュール関数(module_モジュール名())に返されますので、分岐等で処理して下さい。
  • ver1.22の変更点 -- kahata 2007-07-16 (月) 14:21:50
    modulesの下のサブディレクトリに置かれたモジュールの使用を可能にしました。
  • モジュールファイルの数が増えたり、また多くのtemplateを必用とするモジュールを作成すると、同一のディレクトリ(modules/, modules/templatesなど)に全てのファイルを置いたのではmoduleファイルとテンプレートファイルの対応がつけ難くなります。
    そこで、各モジュール毎にモジュールファイル,templatesなどのsmarty関連ファイル群を一つのサブディレクトリに纏められるようにサブディレクトリの使用を可能にしました。
  • モジュールをサブディレトリに纏めた場合は、「サブディレクトリ名/モジュール名」を一つのモジュールとして取り扱って下さい。
  • 活用例1、活用例2をそれぞれサブディレクトリにまとめて置いたファイル群を上記に同梱しています。
  • modules/ディレクトリにあるモジュール(ファイル)も従来同様に使用できます。
     
    コメントをどうぞ
  • 稼働サンプルはありませんか? -- 2007-06-28 (木) 15:23:57
    • 以下は試験的にプラグイン#commentをモジュールに移設した例です。 -- kahata 2007-06-28 (木) 16:07:00

      comment_modules.zip プラグイン #commentをモジュールに移設したテスト例
      上記 include_moduleのパッケージに同梱しています。

  • 「なあんだ、これじゃプラグインと同じじゃないか」とのご意見もあるかもしれませんが、現在Pukiwikiで利用できるデザイン/プログラミングのユーザインターフェイスはスキンとプラグインですので、モジュール開発の一里塚としてプラグインをフックに使っているとご理解下さい。
    将来、モジュールがユーザインターフェイスの強力なツールとして独立に機能するようpukiwiki本体側の環境が整うことを期待しております。(例えば各ページ毎に独自のstyle.cssが使えるようになるだけでも大きい進歩では?)
    開発チームの皆様宜しくお願いします。 -- kahata 2007-06-28 (木) 20:29:31
  • もし、興味あるモジュール(私の言う)を開発されましたら、このページのサブページ(自作プラグイン/include_module.inc.php/活用事例1 など)で活用事例としてご紹介頂けるとありがたいです。 -- kahata 2007-06-29 (金) 20:47:45
  • 質問箱4/129にある、ぃぉぃぉさんのアドバイスに従って、ブラウザの更新ボタンを押しても多重投稿されないように修正したサンプルのコメントモジュールを同梱しました。試用には最新版をダウンロードして下さい。(#include_module本体の変更はありません) -- kahata 2007-07-03 (火) 16:37:46
  • パッケージのダウンロード先が他のurlに置き換わっていましたので訂正しました。このようなことが再々起こればこのページでの提供を中止します。 -- kahata 2007-07-18 (水) 16:39:45
  • 活用例として掲示板などに使われる投稿用フォームの例をver1.22パッケージに同梱しました。 -- kahata 2007-07-19 (木) 16:45:07
  • モジュールのプログラミングに関しては、モジュール関数名をmodule_モジュール名(){}とすること以外特に制約はないのですが、コードの可読性を高め開発を容易にするため、モジュールに共通する処理を出来るだけmodule_functionクラスに移動して各モジュール固有の処理と分離しました。
    このようにコードを整理し補足説明を加えたform/formのサンプルを最新のinclude_module_1.22.zipに同梱しましたのでコードを読む方はこちらを参照して下さい。なおform/formモジュールの機能は従来と変わりありません。 -- kahata 2007-07-21 (土) 17:22:48
    • $baseがwikiシステムのグローバル変数であるための変数名変更、若干のbug fixを行っています。最新版をダウンロードして下さい。 -- kahata 2007-07-23 (月) 18:44:06
    • form/formモジュールにおいて、モジュール変数をmodule_functionクラスのメンバー変数に組み込み機能を拡充しました。 (最新版に同梱)。なおform/formモジュールの機能、#include_moduleは従来と変わりありません。以下の特徴があります。 -- kahata 2007-07-27 (金) 16:08:10
    1. 関数変数名の衝突を防止できる。
    2. module_functionクラスのサブクラスを作成することによって各モジュール毎の設定が可能になる。

*1 テンプレートファイルは通常はhtmlで記述されますが、fetchした結果をconvert_html()することでwiki書法も可能です。(一部確認済み)
*2 多くの有用なモジュールが開発されることを期待しています。
*3 例えばSmarty Math関数をご参照下さい。

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-03-20 (金) 19:04:08
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.313 sec.

OSDN