Cubsonベースのモジュール組み込み型モジュールの作成 (3)
本記事は,d3forum のコメント統合機能のように,他のモジュールに埋め込んで使うモジュールの作成方法を解説するものです。
対象は,Cubson でモジュールを作れて,かつ上のようなモジュールの作り方は分からない方。
以下の説明では,モジュール名:bookmark,テーブル名:bm というモジュール組込型モジュールの例で説明します。
smarty プラグイン
/class/smarty/plugins/ に,function.bookmark_impl.php を作成し,以下のように記述(ファイルを忘れてきたので,ちょっと違うかも。あとで確認して訂正します)。
<?php function smarty_function_bookmark_impl($params, &$smarty) { XCube_DelegateUtil::call('Module.bookmark.Event.Implement', new XCube_Ref($params)) } ?>
preload ファイル
{Xoops_Module}/bookmark/preload/implement.class.php というファイルを作成し,以下のように記述します。
<?php /** * @file * @package bookmark * @version $Id$ */ if (!defined('XOOPS_ROOT_PATH')) exit(); class Bookmark_Implement extends XCube_ActionFilter { /** * @public */ function preBlockFilter() { $root =& XCube_Root::getSingleton(); $root->mDelegateManager->add('Module.bookmark.Event.Implement',"Bookmark_Implement::implement"); } /** * @private */ function implement($params) { // // Boot the action frame of the bookmark module directly. // $root =& XCube_Root::getSingleton(); $_REQUEST['bm_title'] = $params['bm_title']; $root->mController->setupModuleContext('bookmark'); $root->mLanguageManager->loadModuleMessageCatalog('bookmark'); require_once XOOPS_MODULE_PATH . "/bookmark/class/Module.class.php"; $handler =& xoops_gethandler('module'); $module =& $handler->getByDirname('bookmark'); if (!is_object($module)) { XCube_DelegateUtils::call('Legacy.Event.Exception.XoopsModuleNotFound', $dirname); $root->mController->executeRedirect(XOOPS_URL . '/', 1, "You can't access this URL."); die(); } $moduleRunner = new Bookmark_Module($module); $moduleRunner->setActionName('BmImplement'); $root->mController->mExecute->add(array(&$moduleRunner, 'execute')); $root->mController->_processModule(); $root->mController->execute(); } } ?>