ページへ戻る

− Links

 印刷 

Ver 0.5.2 :: XOOPS マニア

xpwiki:xpWiki開発日記/2006-10-30


Tag: 基本設計[4] Extension[5]
2006 10月 30 (月)
 
ページ内コンテンツ
  • Ver 0.5.2
  • これを利用した What's Newプラグイン 用エクステンションは、次のようになります。
    • エクステンション
    • プラグイン
    • プラグインの実体
  • コメント

Ver 0.5.2 anchor.png[6] Edit [7]

XOOPS[8]のモジュール間通信の方法の一つとして、プラグイン型があります。 例えば、はっぴぃ・りなっくす さんの 新着情報(What's New) モジュール 2.xx[9]です。

それらのプラグインは常時必要ではないので必要な時にのみ読み込む仕組みが必要だと考えました。そこで、XpWiki[10]オブジェクトを拡張する形で、動的にエクステンションを読む方法にしてみました。

各エクステンションは TRUST_PATH/modules/xpwiki[10]/class/extension ディレクトリに置きます。

そして、必要な時に XpWiki[10]オブジェクトのインスタンスを作成後に読み込みます。

例えばこんな感じで。

1
2
3
4
5
6
7
8
9
    // 必要なファイルの読み込み
    $mytrustdirpath = dirname(dirname( __FILE__ )) ;
    include_once "$mytrustdirpath/include.php";
    
    // XpWiki[10] オブジェクト作成
    $xpwiki[10] = new XpWiki[10]($mydirname);
    
    // whatsnew extension 読み込み
    $xpwiki[10]->load_extensions("whatsnew");
Page Top

これを利用した What's Newプラグイン 用エクステンションは、次のようになります。 anchor.png[11] Edit [12]

xpWiki[10] を modules/xpwiki[10] ディレクトリにインストール[13]しているとします。違うディレクトリにインストール[13]している場合は、赤字の部分のみ変更すればOK。(要するにプラグインの置き場所を変えるだけです。)

Page Top

エクステンション anchor.png[14] Edit [15]

  • trust側/modules/xpwiki[10]/class/extension ディレクトリに配置します。
filewhatsnew.php[16]
 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[17] http://hypweb.net/
// $Id: whatsnew.php,v 1.1 2006/10/30 03:01:48 nao-pon[17] Exp $
//
 
class XpWikiExtension_whatsnew extends XpWikiExtension {
 
// $this->xpwiki[10] : Parent XpWiki[10] object.
// $this->root   : Global variable.
// $this->cont   : Constant.
// $this->func   : XpWiki[10] 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[10]($this->root->mydirname);
            $page->init($base);
            $page->execute();
            $desc = $page->body;
    
            $ret[$i]['description'] = $desc;
            $i++;
        }
        return $ret;
    }
}
?>
Page Top

プラグイン anchor.png[18] Edit [19]

  • html側/modules/whatsnew/plugins/xpwiki[10] ディレクトリに配置します。
filedata.inc.php[20]
1
2
3
4
5
6
7
8
9
<?php
 
if( ! defined( 'XOOPS_TRUST_PATH[21]' ) ) die( 'set XOOPS_TRUST_PATH[21] into mainfile.php' ) ;
 
$mydirname = basename( dirname( __FILE__ ) ) ;
 
require XOOPS_TRUST_PATH[21].'/modules/xpwiki[10]/include/whatsnew.inc.php' ;
 
?>
Page Top

プラグインの実体 anchor.png[22] Edit [23]

  • trust側/modules/xpwiki[10]/include ディレクトリに配置します。
filewhatsnew.inc.php[24]
 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[17] http://hypweb.net/
// $Id: whatsnew.inc.php,v 1.1 2006/10/30 03:01:48 nao-pon[17] 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[10] オブジェクト作成
    $xpwiki[10] = new XpWiki[10]($mydirname);
    
    // whatsnew extension 読み込み
    $xpwiki[10]->load_extensions("whatsnew");
    
    // 初期化
    $xpwiki[10]->init();
    
    // whatsnew データ取得
    return $xpwiki[10]->extension->whatsnew->get ($limit, $offset);
}
?>
Page Top

コメント anchor.png[25] Edit [26]

  • まずは、XOOPS[8]のグローバル検索, piCalプラグインのエクステンションを作成予定です。 :) -- nao-pon[17] 2006-10-30 (月) 13:57:49



Last-modified: 2006-10-30 (月) 13:57:49 (JST) (6389d) by nao-pon