** include_module.inc.php [#t35c33ec] |RIGHT:100|LEFT:360|c |~サマリ|Smartyによるモジュール開発用プラグイン試行版| |~リビジョン|1.22| |~対応バージョン|1.4.7| |~投稿者|[[kahata]]| |~投稿日|&new{2007-06-24 (日) 22:52:58};| :プラグイン include_module| PHPの[[Smarty:http://smarty.php.net/manual/ja/]]のテンプレート((テンプレートファイルは通常はhtmlで記述されますが、fetchした結果をconvert_html()することでwiki書法も可能です。(一部確認済み) ))を機能を用いた、'''モジュール'''をインクルードする。~ このプラグインはpukiwukiで、PHPテンプレートエンジン、[[Smarty:http://smarty.php.net/manual/ja/]]による'''モジュール'''の開発を期待してSmartyの使い方を例示したプラグインです。((多くの有用なモジュールが開発されることを期待しています。))~ 願わくばwiki本体に[[Smarty:http://smarty.php.net/manual/ja/]]が組み込まれ、[[xoops:http://xoopscube.jp/]]のようなモジュール開発の環境が整うことを期待します。~ [[Smarty:http://smarty.php.net/manual/ja/]]に関する知識があり、且つプラグインのPHPソースコードの妥当性を評価できる方以外は本プラグインを使用しないで下さい。(知識不十分なまま誤用や悪用がないよう公共性に配慮していますので、不親切な説明ですがご了解下さい)~ Validation Check, セキュリティー面のチェックは各自で行うこと。~ :ライセンス| 基本的には[[GNU General Public License(GPL):http://opensource.org/licenses/gpl-license.php]]ですが、自由に配布・利用・改造してかまいません。~ 本pluginを利用して発生する危険、損害については当方は一切の責任を負いません。~ 全て自己リスクでお使い下さい。 :書式| #include_module([サブディレクトリ名/]モジュール名[,引数2,引数3,.....引数n])[{{ モジュールに引き渡すパラメータ(データ類など)の記述 ........ }}] ** 使用例 [#d2f00f18] :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}| **出力結果 [#dcbd735a] CENTER:住所録 |CENTER:名前|CENTER:郵便番号|CENTER:住所|CENTER:電話番号|h |○田△夫|xxx-yyyy|東京都×××××××××|01-1234-4567| ** ダウンロード [#x79abb01] 悪意あるURLの変更がありましたので、このページでの提供を取止めます。&br; 下記の実稼動サンプルのページからダウンロードして下さい。 ** インストールの方法 [#ce3f7d9c] - 上記ファイルをダウンロードし解凍して出来た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/) **更新履歴 [#ba8d6465] |日時|リビジョン|内容|h |2007-06-24|1.00|初版公開 Smartyのテンプレート機能のみ実現| |2007-06-27|1.10|広く一般的に、PHPコードで記述されたモジュールをインクルードするよう強化| |2007-06-28|1.20|modulesに置かれたモジュールでget,postの使用を可能にしました| |2007-07-01|1.21|post先を元のmodules関数にして、分岐処理を行うよう変更した| |2007-07-16|1.22|modulesのサブディレクトリに置かれたmoduleの使用を可能にしました| ** 実稼動サンプル [#md31f074] &color(blue){''公開サーバ上で実際に稼動しているサンプルを以下のサイトに置きましたのでご覧下さい。''}; +[[モジュール template事例(template)実稼動サンプル:http://kahata.la.coocan.jp/wiki/?%A5%E2%A5%B8%A5%E5%A1%BC%A5%EB%2Ftemplate]] +[[モジュール comment事例(comment)実稼動サンプル:http://kahata.la.coocan.jp/wiki/?%A5%E2%A5%B8%A5%E5%A1%BC%A5%EB%2Fcomment]] +[[include_module/活用事例1(flower)実稼動サンプル:http://kahata.la.coocan.jp/wiki/?%A5%E2%A5%B8%A5%E5%A1%BC%A5%EB%2Fphoto]] +[[include_module/活用事例2(column)実稼動サンプル:http://kahata.la.coocan.jp/wiki/?%A5%E2%A5%B8%A5%E5%A1%BC%A5%EB%2Fcolumn]] +[[活用事例3(admin)実稼動サンプル:http://kahata.la.coocan.jp/wiki/?%A5%E2%A5%B8%A5%E5%A1%BC%A5%EB%2Fadmin]] 管理者認証を行う。 +[[活用事例4(form)実稼動サンプル:http://kahata.la.coocan.jp/wiki/?%A5%E2%A5%B8%A5%E5%A1%BC%A5%EB%2Fform]] 投稿用フォームを表示する。 +[[活用事例5(bbs)実稼動サンプル:http://kahata.la.coocan.jp/wiki/?%A5%E2%A5%B8%A5%E5%A1%BC%A5%EB%2Fbbs]] 画像掲示板 &new{2007-08-01 (水) 06:47:07}; ** コメント [#nee7f1fb] - 思い切って公開しました。これはpluginとしての利用例ですが。wiki本体でSmartyが使えるようになると、[[xoops:http://xoopscube.jp/]]のような本格的なモジュールがwikiで開発できると思います。 -- [[kahata]] &new{2007-06-25 (月) 00:02:54}; - [[henoheno]]さん、muthfuncほか一連のプラグインの削除に関し丁寧なフォローをありがとうございます。私自身も特に明確な危険性を認識しているわけでないですが、何分素人の作品で与える影響が未知で自信がないので一旦取り下げました。~ Smartyを使えば取り下げた機能は殆ど実現できると思います。((例えば[[Smarty Math関数:http://smarty.php.net/manual/ja/language.function.math.php]]をご参照下さい。))Smartyの本体に組み込みを考えていただけるとありがたいです。(プラグインのみならずモジュール機能の実現)~ 尚取り下げたプラグイン類の控えは手元にありますので復活は可能です。 -- [[kahata]] &new{2007-06-25 (月) 01:01:50}; - 一応、optionのwikiを付けることでpukiwiki書法のテンプレートも使えるようにしました。( リヴィジョンアップするほどの事もないので最新版をダウンロードして下さい)~ 但し現状ではSmarty のデフォルトの デリミタ である { と } を使用するときに問題が発生しますので&hoge(){};のプラグインはそのままでは使えません。マニュアルを参考にして回避して下さい。具体的には、例えば~ &color(red){ldelim}赤です{rdelim}; と書くとちゃんと機能します。 -- [[kahata]] &new{2007-06-25 (月) 10:40:04}; - ''ver1.10の変更点'' -- [[kahata]] &new{2007-06-27 (水) 08:31:54}; ++#include_moduleプラグインをモジュールのフックとして活用することにより各種のPHPコードで記述された一般的なモジュールをインクルードするように強化しました。 ++書式は第1引数にモジュール名を指定すること以外は自由書式です。各モジュールの仕様に合せて設定して下さい。 ++モジュール名にtemplateを指定することにより、ver1.00のテンプレート機能が実現できます(使用例参照) ++テンプレート機能のみ実現する時のためにver1.00も残しておきます。 -- 当然ですが、このプラグインはプラグイン側からモジュールを呼び出しているだけなので、掲示板などget,postを使った本格的なモジュールは独立したアプリケーションとしてコードを記述する必要があります。~ ver1.00で例示したようにplugin自体にSmartyを使うことは可能で、そのプラグイン独自のスタイル(テンプレート)をデザインできます。($script等が使えるpluginの方が楽かも) -- [[kahata]] &new{2007-06-27 (水) 13:10:36}; -- もう少し説明するとget、postによるメッセージ受送信部分は#comment、#articleを参考にしルックス/スタイルをSmartyで設計すると、通常のHPで見受ける美しい掲示板のプラグインができます。 - ''ver1.20の変更点'' -- [[kahata]] &new{2007-06-28 (木) 15:11:54};~ モジュールから送信されたpost,getを一旦プラグイン#include_moduleで受け止めてモジュール内の関数にコールバックすることによって&color(blue){''モジュールでのpost,getによる受送信を可能にしました。''};~ 要点は以下の通りです。 ++%%モジュールファイル内で実行するアクションプログラムの関数名を以下のようにします。%%~ %% function module_モジュール名_action(){} %% (&color(blue){Ver1.21 post先を元のモジュール関数(module_モジュール名)にしました。以下参照)}; ++ postするフォームのタグを以下のようにします。 <input type="hidden" name="plugin" value="include_module" /> <input type="hidden" name="module" value="[サブディレクトリ名/]モジュール名" /> ++ 以上によりPluginと全く同様の感覚で、#comment,#articleのような掲示板的なモジュールを作成することができるようになりました。(上記1.10の懸念は解決しました) - ''ver1.21の変更点'' -- [[kahata]] &new{2007-07-01 (日) 10:21:54};~ &color(blue){post先を元のモジュール関数に変更し、モジュール関数内で処理するようにしました。};~ 従って、postしたアクションを実行する関数(module_モジュール名_action())の設置が必要なくなりました。~ モジュール関数(module_モジュール名())に返されますので、分岐等で処理して下さい。 - ''ver1.22の変更点'' -- [[kahata]] &new{2007-07-16 (月) 14:21:50};~ modulesの下のサブディレクトリに置かれたモジュールの使用を可能にしました。 -モジュールファイルの数が増えたり、また多くのtemplateを必用とするモジュールを作成すると、同一のディレクトリ(modules/, modules/templatesなど)に全てのファイルを置いたのではmoduleファイルとテンプレートファイルの対応がつけ難くなります。~ そこで、各モジュール毎にモジュールファイル,templatesなどのsmarty関連ファイル群を一つのサブディレクトリに纏められるようにサブディレクトリの使用を可能にしました。 -モジュールをサブディレトリに纏めた場合は、''「サブディレクトリ名/モジュール名」を一つのモジュールとして取り扱って下さい。'' -活用例1、活用例2をそれぞれサブディレクトリにまとめて置いたファイル群を上記に同梱しています。 -modules/ディレクトリにあるモジュール(ファイル)も従来同様に使用できます。 #br コメントをどうぞ - 稼働サンプルはありませんか? -- &new{2007-06-28 (木) 15:23:57}; -- 以下は試験的にプラグイン#commentをモジュールに移設した例です。 -- [[kahata]] &new{2007-06-28 (木) 16:07:00}; >%%comment_modules.zip プラグイン #commentをモジュールに移設したテスト例%%~ 上記 include_moduleのパッケージに同梱しています。 --「なあんだ、これじゃプラグインと同じじゃないか」とのご意見もあるかもしれませんが、現在Pukiwikiで利用できるデザイン/プログラミングのユーザインターフェイスはスキンとプラグインですので、モジュール開発の一里塚としてプラグインをフックに使っているとご理解下さい。~ 将来、モジュールがユーザインターフェイスの強力なツールとして独立に機能するようpukiwiki本体側の環境が整うことを期待しております。(例えば各ページ毎に独自のstyle.cssが使えるようになるだけでも大きい進歩では?)~ 開発チームの皆様宜しくお願いします。 -- [[kahata]] &new{2007-06-28 (木) 20:29:31}; - もし、興味ある'''モジュール'''(私の言う)を開発されましたら、このページのサブページ(自作プラグイン/include_module.inc.php/活用事例1 など)で''活用事例としてご紹介頂けるとありがたいです。'' -- [[kahata]] &new{2007-06-29 (金) 20:47:45}; - [[質問箱4/129]]にある、[[ぃぉぃぉ]]さんのアドバイスに従って、ブラウザの更新ボタンを押しても多重投稿されないように修正したサンプルのコメントモジュールを同梱しました。試用には最新版をダウンロードして下さい。(#include_module本体の変更はありません) -- [[kahata]] &new{2007-07-03 (火) 16:37:46}; - パッケージのダウンロード先が他のurlに置き換わっていましたので訂正しました。このようなことが再々起こればこのページでの提供を中止します。 -- [[kahata]] &new{2007-07-18 (水) 16:39:45}; - 活用例として掲示板などに使われる投稿用フォームの例をver1.22パッケージに同梱しました。 -- [[kahata]] &new{2007-07-19 (木) 16:45:07}; - '''モジュール'''のプログラミングに関しては、モジュール関数名をmodule_モジュール名(){}とすること以外特に制約はないのですが、コードの可読性を高め開発を容易にするため、'''モジュール'''に共通する処理を出来るだけmodule_functionクラスに移動して各モジュール固有の処理と分離しました。&br; このようにコードを整理し補足説明を加えたform/formのサンプルを最新のinclude_module_1.22.zipに同梱しましたのでコードを読む方はこちらを参照して下さい。なお'''form/formモジュール'''の機能は従来と変わりありません。 -- [[kahata]] &new{2007-07-21 (土) 17:22:48}; -- $baseがwikiシステムのグローバル変数であるための変数名変更、若干のbug fixを行っています。最新版をダウンロードして下さい。 -- [[kahata]] &new{2007-07-23 (月) 18:44:06}; -- form/formモジュールにおいて、モジュール変数をmodule_functionクラスのメンバー変数に組み込み機能を拡充しました。 (最新版に同梱)。なお'''form/formモジュール'''の機能、#include_moduleは従来と変わりありません。以下の特徴があります。 -- [[kahata]] &new{2007-07-27 (金) 16:08:10}; ++ 関数変数名の衝突を防止できる。 ++ module_functionクラスのサブクラスを作成することによって各モジュール毎の設定が可能になる。 - wWmtFOOzUYbxKGzF -- [[ldatdw]] &new{2009-03-20 (金) 14:35:44}; #comment //#comment