Ver 0.5.2
XOOPSのモジュール間通信の方法の一つとして、プラグイン型があります。
例えば、はっぴぃ・りなっくす さんの 新着情報(What's New) モジュール 2.xxです。
それらのプラグインは常時必要ではないので必要な時にのみ読み込む仕組みが必要だと考えました。そこで、XpWikiオブジェクトを拡張する形で、動的にエクステンションを読む方法にしてみました。
各エクステンションは TRUST_PATH/modules/xpwiki/class/extension ディレクトリに置きます。
そして、必要な時に XpWikiオブジェクトのインスタンスを作成後に読み込みます。
例えばこんな感じで。
1
2
3
4
5
6
7
8
9
| // 必要なファイルの読み込み
$mytrustdirpath = dirname(dirname( __FILE__ )) ;
include_once "$mytrustdirpath/include.php";
// XpWiki オブジェクト作成
$xpwiki = new XpWiki($mydirname);
// whatsnew extension 読み込み
$xpwiki->load_extensions("whatsnew");
|
これを利用した What's Newプラグイン 用エクステンションは、次のようになります。
※ xpWiki を modules/xpwiki ディレクトリにインストールしているとします。違うディレクトリにインストールしている場合は、赤字の部分のみ変更すればOK。(要するにプラグインの置き場所を変えるだけです。)
エクステンション
- trust側/modules/xpwiki/class/extension ディレクトリに配置します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
| <?php
//
// Created on 2006/10/29 by nao-pon http://hypweb.net/
// $Id: whatsnew.php,v 1.1 2006/10/30 03:01:48 nao-pon Exp $
//
class XpWikiExtension_whatsnew extends XpWikiExtension {
// $this->xpwiki : Parent XpWiki object.
// $this->root : Global variable.
// $this->cont : Constant.
// $this->func : XpWiki functions.
function get ($limit, $offset) {
$i = 0;
$ret = array();
$desc = '';
$recent_dat = $this->cont['PKWK_MAXSHOW_CACHE'];
$recent_line = @file($this->cont['CACHE_DIR'] . $recent_dat);
$recent_arr = array_slice($recent_line, 0, $limit);
foreach($recent_arr as $line) {
list($time, $base) = explode("\t", trim($line));
$localtime = $time + ($this->cont['ZONETIME']);
$ret[$i]['link'] = $this->root->script."?".rawurlencode($base);
$ret[$i]['title'] = $base;
$ret[$i]['time'] = $localtime;
// 指定ページの本文取得
$page = new XpWiki($this->root->mydirname);
$page->init($base);
$page->execute();
$desc = $page->body;
$ret[$i]['description'] = $desc;
$i++;
}
return $ret;
}
}
?>
|
プラグイン
- html側/modules/whatsnew/plugins/xpwiki ディレクトリに配置します。
1
2
3
4
5
6
7
8
9
| <?php
if( ! defined( 'XOOPS_TRUST_PATH' ) ) die( 'set XOOPS_TRUST_PATH into mainfile.php' ) ;
$mydirname = basename( dirname( __FILE__ ) ) ;
require XOOPS_TRUST_PATH.'/modules/xpwiki/include/whatsnew.inc.php' ;
?>
|
プラグインの実体
- trust側/modules/xpwiki/include ディレクトリに配置します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
| <?php
//
// Created on 2006/10/29 by nao-pon http://hypweb.net/
// $Id: whatsnew.inc.php,v 1.1 2006/10/30 03:01:48 nao-pon Exp $
//
// DIRNAME_new() 関数を動的に生成
eval( '
function '.$mydirname.'_new( $limit=0, $offset=0 )
{
return xpwiki_whatsnew_base( "'.$mydirname.'" , $limit, $offset ) ;
}
' ) ;
// DIRNAME_new() 関数の実体
function xpwiki_whatsnew_base( $mydirname, $limit, $offset ) {
// 必要なファイルの読み込み
$mytrustdirpath = dirname(dirname( __FILE__ )) ;
include_once "$mytrustdirpath/include.php";
// XpWiki オブジェクト作成
$xpwiki = new XpWiki($mydirname);
// whatsnew extension 読み込み
$xpwiki->load_extensions("whatsnew");
// 初期化
$xpwiki->init();
// whatsnew データ取得
return $xpwiki->extension->whatsnew->get ($limit, $offset);
}
?>
|
コメント
- まずは、XOOPSのグローバル検索, piCalプラグインのエクステンションを作成予定です。 -- nao-pon