Toggle main menu visibility
新聞
下載
教材
影音
討論
其他選單
好站連結
行事曆
電子相簿
常見問題
萬用表單
即時留言簿
友站消息
社大學員
:::
登入
登入
帳號
密碼
登入
重整畫面
:::
所有書籍
「1041 XOOPS模組開發」目錄
MarkDown
1-5 tad_ebook_page 資料表
1. XOOPS的開發環境
1-1 xoops_version.php
1-2 languages/tchinese_utf8/modinfo.php
1-3 images/logo.png
1-4 tad_ebook 資料表
1-5 tad_ebook_page 資料表
2. 後台頁面與表單物件
2-1 sql/mysql.sql
2-2 xoops_version.php
2-3 admin/menu.php
2-4 language/tchinese_utf8/modinfo.php
2-5 templates/tad_ebook_adm_main.html
2-6 admin/main.php
3. 樣板與管理功能
3-1 admin/main.php
3-2 temaplates/tad_ebook_adm_main.html
4. 前台頁面與HTML表單
4-1 admin/main.php
4-2 /templates/tad_ebook_adm_main.html
4-3 /interface_menu.php
4-4 /post.php
4-5 /templates/tad_ebook_post.html
4-6 /xoops_version.php
5. 前台顯示及各種控管
5-1 /post.php
5-2 /templates/tad_ebook_post.html
5-3 /index.php
5-4 /templates/tad_ebook_index.html
5-5 /xoops_version.php
6. XOOPS群組與權限
6-1 /admin/menu.php
6-2 /admin/groupperm.php
6-3 /modules/system/admin/groupperm.php
6-4 /interface_menu.php
6-5 /xoops_version.php
6-6 /function.php
6-7 /verify.php
6-8 /templates/tad_ebook_verify.html
6-9 /post.php
6-10 /templates/tad_ebook_post.html
7. 搜尋、語系、偏好設定、自動功能
7-1 /templates/tad_ebook_post.html
7-2 /xoops_version.php
7-3 /include/search.php
7-4 /admin/main.php
7-5 /language/tchinese_utf8/admin.php
7-6 /templates/tad_ebook_adm_main.html
7-7 /language/tchinese_utf8/modinfo.php
7-8 /post.php
7-9 /include/onUpdate.php
7-10 /include/onInstall.php
7-11 /sql/mysql.sql
7-12 /include/onUninstall.php
7-13 /index.php
8. 上傳、區塊與BootStrapS3
8-1 /xoops_version.php
8-2 /sql/mysql.sql
8-3 /include/onUpdate.php
8-4 /admin/main.php
8-5 /templates/tad_ebook_adm_main.html
8-6 /blocks/tad_ebook_list.php
8-7 /templates/blocks/tad_ebook_list.html
8-8 /index.php
8-9 /templates/tad_ebook_index.html
9. 評論與通知功能
9-1 /xoops_version.php
9-2 /index.php
9-3 /templates/tad_ebook_index.html
9-4 /comment_new.php
9-5 /include/notification.inc.php
9-6 /admin/main.php
9-7 /language/tchinese_utf8/mail_template/new_ebook.tpl
9-8 Uniform Server的信件設定
9-9 /templates/tad_ebook_index_b3.html
9-10 /templates/tad_ebook_verify_b3.html
9-11 bootstrap2與bootstrap3水平表單結構
9-12 /templates/tad_ebook_post_b3.html
9-13 /templates/tad_ebook_adm_main_b3.html
2-1 sql/mysql.sql
1041 XOOPS模組開發 ============== [](http://www.tad0616.net/uploads/tad_book3/file/1041/2.pdf) ### 一、 今天要做的流程: 1. 產生資料庫架構檔,安裝時才會自動建立出所需的資料表(務必再安裝模組前完成) 2. 建立後台管理頁面,需先設定好後台選單,並建立該檔案的樣板以及相關語系。 3. 編輯樣板檔,建立刊物建立表單,並使之可以存入資料庫。 ### 二、 匯出SQL檔案 1. http://163.26.52.243/~帳號/modules/tad\_adm/pma.php 2. 儲存至模組的sql目錄下為mysql.sql,並將裡面的一些註解及 set 刪除,避免日後模組無法安裝。 3. 修改 xoops\_version.php: ``` $modversion['sqlfile']['mysql'] = "sql/mysql.sql"; $modversion['tables'][1] = "ebook"; $modversion['tables'][2] = "ebook_page"; ``` 4. 至此已經可以將模組安裝起來囉! ### 三、 XOOPS的模組管理後台 1. XOOPS並沒有規定一定要有管理後台,若是沒有管理後台,只要在xoops\_version.php中把$modversion\['hasAdmin'\]設為0即可。 2. $modversion\['adminindex'\] = 'admin/index.php'; 定義當使用者點選模組管理時,要連到的後台預設頁面。 3. $modversion\['adminmenu'\] = 'admin/menu.php'; 定義後台模組管理界面的其他功能選單。 ### 四、 模組管理後台選單檔 1. 每多一個功能選項,請多一組以下設定,其中路徑部份是以該模組目錄為基準(頭尾那兩組設定無須動它,改中間那組即可)。 ``` //多個選項 $i++; //選項標題 $adminmenu[$i]['title'] = _MI_TAD_EBOOK_ADMENU1; //選項連結 $adminmenu[$i]['link'] = "admin/main.php"; //選項說明 $adminmenu[$i]['desc'] = _MI_TAD_EBOOK_ADMENU1_DESC ; //選項圖示 $adminmenu[$i]['icon'] = 'images/admin/ebook.png' ; ``` 2. 有中文的地方盡量用語系常數,直打中文也行,只是這樣只有相同編碼的網站才能使用。 3. admin/menu.php的語系一樣是放在language/tchinese\_utf8/modinfo.php中。 ``` define('_MI_TAD_EBOOK_ADMENU1' , '電子刊物管理'); define('_MI_TAD_EBOOK_ADMENU1_DESC' , '電子刊物管理'); ``` ### 五、 模組管理後台架構 1. 後台檔案最基本架構如admin/main.php,樣板檔位置在templates下,一般建議命名規則為「模組名\_目錄\_檔名.html」。樣板要在引入header.php之前設定好。 ``` //設定樣板檔(必) $xoopsOption['template_main'] = "tad_ebookadm_main.html"; //引入預設檔頭(必) include_once "header.php"; //引入共同函數檔 include_once "../function.php"; ``` 2. 請將templates/demo\_adm\_index.html改為實際樣板名稱(連同b3樣板一起改)。 3. xxx\_b3.html是bootstrap3的樣板,等日後預設樣板做好後,再來轉為b3樣板即可。 4. 頁尾需引入頁尾檔。至於中間部份隨人習慣任意發揮。 ``` include_once 'footer.php'; ``` 5. 【重要】記得修改 xoops\_version.php中的樣板設定,改完請更新模組,以套用新值。 ### 六、 物件的基本動作 1. PHP的Class(類)是一個物件藍圖 2. 要讓Class有作用需要經過實體化(new)的動作:$物件 = new PHP\_Class(); 3. 物件會有所謂的方法(method)其實就是函數,讓您對此物件進行設、取值或執行特定物件功能:$物件->方法(); 4. XOOPS的表單物件設定完,最後都需要進行$物件->render();以產生程式碼。 5. 詳細的XOOPS Class請參考:
### 七、 XOOPS內建表單Class 1. 要使用內建表單需先引入此行: ``` include_once(XOOPS_ROOT_PATH."/class/xoopsformloader.php"); ``` 2. 建立一個表單: ``` $form = new XoopsThemeForm('表單標題', 'name', 'action.php', 'post', '使用token' , '摘要'); ``` 3. 把表單元件加入表單中的方法: ``` $form->addElement($元件變數); ``` 4. 把幾個元件組合在一起,並放到表單中: ``` $Tray=new XoopsFormElementTray('標題', ' ', 'name'); $Tray->addElement(new XoopsFormButton('', 'name', '送出', 'submit')); $Tray->addElement(new XoopsFormButton('', 'name', '清除', 'reset')); $form->addElement($Tray); ``` 5. 產生表單程式碼: ``` $f=$form->render(); ``` 6. 各種表單元件: ``` //標籤元件 $Label =new XoopsFormLabel('標題', '內容'); //文字輸入 $Text=new XoopsFormText('標題', 'name', 大小 , 最大長度 , '值'); //隱藏欄位 $Hidden =new XoopsFormHidden('name', '值'); //安全檢查 $Token =new XoopsFormHiddenToken('XOOPS_TOKEN',360); //上傳欄位 $form->setExtra("enctype='multipart/form-data'"); $File =new XoopsFormFile('標題', 'name', '2048'); //密碼欄位 $Password=new XoopsFormPassword('標題', 'name', 大小, 最大長度, '值'); //大量文字 $TextArea=new XoopsFormTextArea('標題', 'name', '值' , 欄寬 , 列高 , 'id'); //文字日期 $DateSelect=new XoopsFormTextDateSelect('標題', 'name', 15, 0); //日期時間 $DateTime=new XoopsFormDateTime('標題', 'name', 15, 0); //XOOPS編輯器 $DhtmlTextArea=new XoopsFormDhtmlTextArea('標題' , 'name', '值' , 欄寬 , 列高); //按鈕 $Button =new XoopsFormButton('標題', 'name', '值', '類型'); ``` 7. 有選項的表單元件,其選項預設值得設定方式為: ``` $表單元件->setValue($多重預設值陣列); ``` 8. 新增選項方式有兩種,第一種是一個一個加入: ``` $表單元件->addOption('選單值1', '顯示值1', false); ``` 9. 第二種是先設好選項陣列,一次加入。(和上面那種方法可以同時使用) ``` $options['選單值2']='顯示值2'; $options['選單值3']='顯示值3'; $表單元件->addOptionArray($options); ``` 10. 所有有選項的表單元件: ``` //複選方塊 $CheckBox = new XoopsFormCheckBox('標題', 'name', '值','id'); //單選鈕 $Radio = new XoopsFormRadio('標題', 'name', '值'); //是否單選 $RadioYN=new XoopsFormRadioYN('標題', 'name', '值'); //下拉選單 $Select=new XoopsFormSelect('標題', 'name', '預設值', 大小, 多選); //群組核選 $SelectCheckGroup=new XoopsFormSelectCheckGroup('標題', 'name', '值', 大小 ,多選); //國家選單 $SelectCountry=new XoopsFormSelectCountry('標題', 'name', 'TW', 大小); //編輯器選單 $SelectEditor=new XoopsFormSelectEditor(&$form, 'name', '值', 使用HTML , 可選編輯器陣列); //群組選單 $SelectGroup=new XoopsFormSelectGroup('標題', 'name', 含訪客, '值', 大小 ,多選); //語系選單 $SelectLang=new XoopsFormSelectLang('標題', 'name', '值', 大小); //比對選單 $SelectMatchOption=new XoopsFormSelectMatchOption('標題', 'name', '值', 大小); //佈景選單 $SelectTheme=new XoopsFormSelectTheme('標題', 'name', '值', 大小); //時區選單 $SelectTimezone=new XoopsFormSelectTimezone('標題', 'name', '值', 大小); //使用者選單 $SelectUser=new XoopsFormSelectUser('標題', 'name', 含訪客, '值', 大小 ,多選); ``` ### 八、 在內建表單元件加入額外設定 1. 利用$表單元件->setExtra()的方法,可以在表單元件中加入任何額外的語法。 ``` $Text->setExtra("class='span12'"); $Text->setExtra("style='width: 90%'"); $Text->setExtra("placeholder='請輸入標題'"); ``` ### 九、 $xoopsTpl 樣板物件,將程式執行結果傳送至樣板 1. 樣板(template)是使用者眼睛看到的界面,我們經由程式產生的任何結果,都可以傳送至樣板以便呈現在畫面上。 2. 若是在函數中要使用$xoopsTpl樣板物件,記得用global $xoopsTpl,才能使用。 3. 其用法如下: ``` $xoopsTpl->assign('樣板標籤' , $呈現的內容); ``` 4. 在樣板檔中(如:tad\_ebookadm\_main.html),用<{$樣板標籤}>來顯示其內容。 ### 十、 $xoopsDB資料庫物件的幾個常用方法 1. 若是在函數中要使用$xoopsDB樣板物件,記得用global $xoopsDB,才能使用。 2. $xoopsDB->prefix('資料表名稱') 自動加上資料表前置字串 3. $xoopsDB->query($sql) 及$xoopsDB->queryF($sql) 執行SQL語法 4. $xoopsDB->getInsertId() 取得最後新增的編號 5. $xoopsDB->fetchRow($result) 抓回以數字為索引的資料陣列 - (1) 得到的結果會像:$data\[0\]、$data\[1\]、$data\[2\]...這樣的 - (2) 可搭配list($sn,$title,$content)=$data 來將內容指派到變數中。 6. $xoopsDB->fetchArray($result)抓回以欄名為索引的資料陣列 - (1) 得到的結果會像:$data\['sn'\]、$data\['title'\]、$data\['content'\]...這樣的 7. 寫入範例: ``` //替資料表加入前置字串 $tbl=$xoopsDB->prefix('ebook'); //寫入資料庫的SQL語法 $sql="insert into $tbl (`ebook_title` , `ebook_post_date` , `ebook_publish_date`) values('$ebook_title' , '$ebook_post_date' , '$ebook_publish_date')"; //送到資料庫執行SQL $xoopsDB->query($sql) or die(mysql_error()); //取得新增資料的編號 $ebook_sn=$xoopsDB->getInsertId(); ``` ### 十一、 建立必填欄位 1. 建立表單時new XoopsThemeForm(),一定要設定name。 2. 新增元件時addElement(),第二個參數設為true。 ### 十二、 建立安全的表單 1. 表單加入「安全檢查」的表單元件。 new XoopsFormHiddenToken(); 2. 儲存或更新時,請加入以下這段檢查語法,若不是合法表單,會被轉向到首頁: ``` //安全判斷 if(!$GLOBALS['xoopsSecurity']->check()){ //錯誤訊息 $error=implode("
" , $GLOBALS['xoopsSecurity']->getErrors()); //轉向到首頁 redirect_header($_SERVER['PHP_SELF'],3, $error); } ``` ### 十三、 從資料庫讀出資料 1. 寫好SQL的select讀出語法,並利用 order by `欄位` 來進行排序。 2. 利用while()迴圈,抓出所有資料,利用「.」(字串連接符)集成所有內容後,套進樣板檔中以便呈現。 ``` //替資料表加入前置字串 $tbl=$xoopsDB->prefix('ebook'); //讀出資料庫的SQL語法 $sql="select * from $tbl order by ebook_post_date desc"; //送到資料庫執行SQL $result=$xoopsDB->query($sql) or die(mysql_error()); //建立內容初始值 $list_ebook="
現有刊物列表
"; //用迴圈依序抓出資料 while($ebook = $xoopsDB->fetchArray($result)){ //將抓出資料集成內容 $list_ebook.="
{$ebook['ebook_title']} ({$ebook['ebook_post_date']} 截稿, {$ebook['ebook_publish_date']} 發行)
"; } //套入樣板檔中 $xoopsTpl->assign('list_ebook' , $list_ebook); ``` 3. 樣板檔中記得用 <{$list\_ebook}> 來顯示出所有內容。 4. 若是在函數中要同時使用 $xoopsDB 及 $xoopsTpl 物件,可用「global $xoopsDB,$xoopsTpl;」,用逗號隔開,以便在函數中使用之。 5. 目前用字串連接符把所有內容串起來的作法並非最佳方法,下次會說明如何做成樣板標籤的陣列值,使之彈性更大。
:::
搜尋
search
進階搜尋
QR Code 區塊
快速登入
所有討論區
「PHP全端開發」線上課程討論區
XOOPS使用討論區
一般研習學員
社大學員專用
路過哈啦區
XOOPS佈景設計
XOOPS模組開發
Tad書籍區
即時留言簿
書籍目錄
展開
|
闔起
線上使用者
129
人線上 (
86
人在瀏覽
線上書籍
)
會員: 0
訪客: 129
更多…