因為XOOPS2.2有比較多方便的工具,所以...我又變心了,現在使用XOOPS2.2當作開發環境。下面是一些發現:
1. 管理區的選單有現成的物件可以使用,只要引入 /include/cp_header.php 執行 xoops_cp_header() ,接著就可以使用$xTheme->loadModuleAdminMenu(2, 'Category') 來產生 /modules/module_name/xoops_version.php 所指定的管理介面選單;第一個參數是選單項目的索引值,第二個參數則是這個頁面的名稱。在該物件的定義檔案為 /class/theme.php
2. 內建的表單物件很難搞,把 /class/xoopsformloader.php 引入後有一堆東西要看清楚怎麼用( /class/xoopsform/* ),做個簡單的表單就要變的這樣:
$form = new XoopsThemeForm($title, 'guide_form', $url);
$pgid_tray = new XoopsFormSelect('Parent Guide', 'pgid', $data['pgid']);
$pgid_tray->addOptionArray(glist($data['pgid']));
$form->addElement($pgid_tray);
if(!is_null($data))
{
$tid_tray = new XoopsFormSelect('Parent Component', 'tid', $data['tid']);
$tid_tray->addOptionArray(tlist($data['type']));
}
else
{
$tid_tray = new XoopsFormSelect('Parent Component', 'tid', $_GET['tid']);
$tid_tray->addOptionArray(tlist($_GET['type']));
}
$form->addElement($tid_tray);
$form->addElement(new XoopsFormText('Guide\'s Name', 'name', '40', '100', $data['name']));
$form->addElement(new XoopsFormTextArea('Content', 'content', $data['content']));
if(is_object($xoopsUser) && in_array('1', $xoopsUser->_groups))
{
$status_tray = new XoopsFormSelect('Status', 'status', $data['status']);
$status_tray->addOptionArray($status_array);
$form->addElement($status_tray);
}
else
{
$form->addElement(new XoopsFormHidden('status', '0'));
}
$tray1 = new XoopsFormElementTray('Action');
$tray1->addElement(new XoopsFormButton(null, null, 'Submit', 'submit'));
$cancel_button = new XoopsFormButton(null, null, 'Cancel', 'button');
$cancel_button->setExtra('onclick="location='.xoops_getenv('PHP_SELF').'"');
$tray1->addElement($cancel_button);
$form->addElement($tray1);
$form->addElement(new XoopsFormHidden('action', '_save'));
if(!is_null($data))
{
$form->addElement(new XoopsFormHidden('gid', $data['gid']));
$form->addElement(new XoopsFormHidden('type', $data['type']));
} else
$form->addElement(new XoopsFormHidden('type', $_GET['type']));
$form->display();
3. 標準的開發模式也不是很人性化,也許是我還不熟悉物件化的開發方法吧;我必須在 /modules/module_name/class/classname.php 定義物件,物件的名稱還得跟檔案名稱一致,像是 guide.php 這樣的檔案名稱中就是 Guide 物件(記得首字大寫);還要定義資料庫存取物件( ResourcesGuideHandler ),然後透過 $guide_handler = &xoops_getmodulehandler('guide', 'resources') 取得物件。
物件開頭像這樣:
class Guide extends XoopsObject
{ ... }
class ResourcesGuideHandler extends XoopsObjectHandler
{ ... }
繼承的方法與特性可以參考 /kernel/object.php ,好像沒把物件搞的那麼大過 ^^||
看來XOOPS的開發人員是比較建議透過這種方式來讓模組比較好掌控,class Guide定義基本特性、方法,而 class ResourcesGuideHandler 則是用來存取的主要物件,大部分放的是資料庫查詢功能,新增基本物件時也是透過Handler物件。