詳細な説明は省きますが、XOOPSモジュール作成に必要なファイルの一覧を以下にまとめます。
(モジュールのルートディレクトリ)
|——xoopsversion.php //モジュールの基本設定を記述したもの。
|——images/
|——logo.jpg // モジュールのロゴ画像。
|——language/
|——japanese/
|——modinfo.php // モジュール情報の言語定義ファイル。
|——sql
|——mysql.sql // モジュールインストール時に実行するSQLクエリを記述したもの。(DBを使わなければ必要ない)
以上は、最低限必要なファイルです。ブロックや管理者メニューを作成するには、対応した幾つかのファイルを他に必要とします。
(XooNIpsのインストールや使い方については、本家サイトを参照してください。)
XooNIpsはXOOPSモジュールとして開発されているため、そのファイル構造は一般のXOOPSモジュールと共通した点が多くあります。その一方で、XooNIpsに依存するモジュール(アイテムタイプモジュールなど)に利用されることを意図したclassディレクトリとincludeディレクトリが用意されています。
以上のファイルを必要に応じて読み込むことで、対応したXooNIpsの関数を使うことができます。XooNIpsの関数については本家サイトのマニュアルを参照してください。(昨年から更新が止まっているため、一部情報が古いです)
nimgsearchで、XooNIpsの関数を必要とする処理は以下のとおりです。
検索フォームの項目取得は、svr/getMetaSearchBlock.phpで行われています。このPHPファイルでは、冒頭でXOOPSのヘッダーに加え、XooNIpsのlib.phpおよびxnpnimgcenterのview.phpをインクルードしています。
require('../../../mainfile.php');
include(XOOPS_ROOT_PATH.'/header.php');
// XooNIps標準ライブラリのインクルード
include_once XOOPS_ROOT_PATH.'/modules/xoonips/include/lib.php';
include_once XOOPS_ROOT_PATH.'/modules/xnpnimgcenter/include/view.php';
lib.phpを読み込むことで、[アイテムタイプ名]GetAdvancedSearchBlock()という関数を使えるようにしています。これを実行すると、そのアイテムタイプの検索フォームに必要な項目を取得できます。
view.phpを読み込むことで、xnpnimgcenterGetSupportedItemTypes()という関数を使えるようにしています。これを実行することで、xnpnimgcenterが対応しているアイテムタイプの一覧を取得しています。
// 詳細検索ブロックを返す $ItemTypes = xnpnimgcenterGetSupportedItemTypes(); if( isset($ItemTypes[$_POST['type']]) ) // ユーザが指定したアイテムが対応していれば、if文内を実行 { $search_var = array(); $func = $ItemTypes[$_POST['type']].'GetAdvancedSearchBlock'; // 指定されたアイテムのGetAdvancedSearchBlock関数を得る global $nimg_metasearch_encoding; global $xoopsConfig; if (isset($nimg_metasearch_encoding[$xoopsConfig['language']])){ $enc = $nimg_metasearch_encoding[$xoopsConfig['language']]; header('Content-Type: text/html; charset:'.$enc); echo mb_convert_encoding( $func( $search_var ), $enc, mb_internal_encoding() ); } else echo $func( $search_var ); // 検索フォームのHTMLソースを表示する }
論文検索は、svr/getArticle.phpで行われています。このPHPファイルでは、冒頭で次のようにファイルのインクルードを行っています。
require('../../../mainfile.php'); include_once XOOPS_ROOT_PATH.'/modules/xoonips/include/create_session.php'; include_once XOOPS_ROOT_PATH.'/modules/xoonips/include/lib.php'; include_once XOOPS_ROOT_PATH.'/modules/xoonips/condefs.php'; include_once XOOPS_ROOT_PATH.'/modules/xnpnimgcenter/include/view.php';
それぞれを読む込むことで使用している関数は、次のとおりです。
実際には、以下のような形で使用されています。
// NIMGアイテムを検索する function xnpnimgsearchNIMGItemSearch( &$nimg_iids, $andor, $base_ids ) { $search_var = array(); $search_tab = ''; /** * * function xnpSearchExec( $op, $keyword, $search_itemtype, $private_flag, &$msg, &$iids, &$search_var, &$search_cache_id, $search_tab ) * @param op 'quicksearch' 'advancedsearch' 'itemsubtypesearch' 'itemtypesearch' * @param keyword 検索キーワード * @param search_itemtype 検索方式('all', 'basic' or アイテムタイプ名(xnppaperなど) ) * @param private_flag Privateなインデックスだけを検索するときtrue * @param msg エラーメッセージを受け取る変数のリファレンス * @param iids 検索条件にマッチしたアイテムのIDを受け取る配列のリファレンス item_id or identifier * @param search_cache_id 検索cacheのID. in/out * @param search_tab 'metadata' 'file' その他(tciとかいうテーブル) * @return true search succeed. * @return false search failed. make sure $msg for detail. * this function needs $xoopsDB, $xoopsUser, $xoopsConfig, $_SESSION. * */ $result = xnpSearchExec( 'advancedsearch', '', 'xnpnimgcenter', false, $msg, $nimg_iids, $search_var, $search_cache_id, $search_tab ); // 検索条件に合致したアイテムID群が$nimg_iidsに格納される return $result; } function makeResponseXML( $idx ) { $basic = xnpGetBasicInformationArray( $idx ); /* アイテムのタイトルを取得 */ if( $basic != false ) $title = implode( ',', $basic['titles'] ); else $title = 'Unknown'; /* タライラック座標を取得 */ $detail = xnpnimgcenterGetDetailInformation( $idx ); $tal_ary = explode( ':', $detail['talairach'] ); /* 元論文の情報を取得 */ $baseitembase = xnpGetBasicInformationArray( $detail['baseitem_id'] ); if( ($basetype = xnpnimgcenterGetSupportedTypeName( $baseitembase['item_type'] )) == '' ) continue; $func = $basetype.'GetDetailInformation'; $baseitem_detail = $func( $detail['baseitem_id'] ); $info = array_merge( $baseitembase, $baseitem_detail ); /* ・・・中略:ここでXMLの出力処理が行われる・・・ */ }