Toggle main menu visibility
新聞
下載
教材
影音
討論
其他選單
好站連結
行事曆
電子相簿
常見問題
萬用表單
即時留言簿
友站消息
社大學員
:::
登入
登入
帳號
密碼
登入
重整畫面
:::
所有書籍
「[1071]XOOPS模組開發」目錄
MarkDown
1-8 templates/snews_adm_topic.tpl
1. XOOPS模組基礎架構
1-1 xoops_version.php
1-2 sql/mysql.sql
1-3 admin/menu.php
1-4 language/tchinese_utf8
1-5 admin/main.php
1-6 templates/snews_adm_main.tpl
1-7 admin/topic.php
1-8 templates/snews_adm_topic.tpl
2. 表單、資料庫、使用者物件
2-1 admin/main.php
2-2 templates/snews_adm_main.tpl
2-3 templates/op_snews_list.tpl
2-4 templates/op_snews_form.tpl
2-5 sql/mysql.php
2-6 xoops_version.php
2-7 function.php
3. 前台顯示、編輯、刪除
3-1 index.php
3-2 xoops_version.php
3-3 menu.php
3-4 header.php
3-5 templates/snews_index.tpl
3-6 templates/op_snews_show.tpl
3-7 templates/op_snews_list.tpl
3-8 admin/main.php
4. 首頁精選文章輪播
4-1 admin/main.php
4-2 index.php
4-3 templates/op_snews_show.tpl
4-4 templates/op_snews_list.tpl
5. 自動生成群組並做權限判斷
5-1 xoops_version.php
5-2 interface_menu.php
5-3 header.php
5-4 index.php
5-5 admin/main.php
5-6 include/onUpdate.php
5-7 include/onInstall.php
5-8 include/onUninstall.php
5-9 templates/op_snews_list.tpl
5-10 templates/op_snews_show.tpl
5-11 include/search.php
6. json應用與XOOPS區塊
6-1 xoops_version.php
6-2 language/tchinese_utf8/modinfo.php
6-3 index.php
6-4 html.php
6-5 templates/op_snews_show.tpl
6-6 function.php
6-7 blocks/snews_block_focus.php
6-8 blocks/snews_block_focus.tpl
6-9 css/module.css
6-10 interface_menu.php
6-11 language/tchinese_utf8/blocks.php
6-12 templates/op_snews_list.tpl
6-13 function_block.php
7. 產生PDF及拉動排序
7-1 templates/snews_index.tpl
7-2 templates/op_snews_list.tpl
7-3 index.php
7-4 css/module.css
7-5 templates/op_snews_show.tpl
7-6 pdf.php
7-7 interface_menu.php
7-8 pdf_all.php
8. Excel匯出匯入及點擊編輯
8-1 interface_menu.php
8-2 focus.php
8-3 function.php
8-4 templates/op_snews_focus.tpl
8-5 save_sort.php
8-6 excel.php
8-7 excel2.php
8-8 import.php
8-9 templates/op_import_form.tpl
9. 產生word檔、壓縮及解壓
9-1 index.php
9-2 templates/op_snews_show.tpl
9-3 save.php
9-4 interface_menu.php
9-5 word.php
9-6 zip.php
9-7 templates/op_zip_import.tpl
2-1 admin/main.php
\[1071\]XOOPS模組開發 ================= ### [
上週模組下載](https://www.tad0616.net/uploads/tad_book3/file/44/snews.zip) ### 一、 關於XOOPS的樣板引擎 1. XOOPS的樣板引擎是使用 smarty 2.6.x(所以,新的 smarty 3.x 語法無法使用) 2. 頁面的主樣板檔用`$xoopsOption['template_main']`來指定,需註冊到`xoops_version.php`中的`$modversion['templates']`中,如此,XOOPS會自動將之存入資料庫,提供線上編輯樣板或模組自訂樣板功能。 3. 樣板檔副檔名可為**.html**或**.tpl**(建議) 4. XOOPS的樣板引擎物件為 `$xoopsTpl`,在php檔中套用變數到樣板的語法為: ``` $xoopsTpl->assign('樣板變數名稱' , $PHP變數); ``` 5. 在樣板中,則是使用以下方式來呈現變數: ``` <{$樣板變數名稱}> ``` 6. 樣板檔中亦可引入(用db)其他樣板檔(`$xoops_rootpath` 是XOOPS實際安裝路徑): ``` <{includeq db="$xoops_rootpath/modules/模組名稱/templates/有註冊的樣板檔.tpl"}> ``` 7. 可把流程中的每個需顯示的op動作,獨立做成樣板檔,然後自動引入(用file無須註冊) ``` <{includeq file="$xoops_rootpath/modules/模組名稱/templates/op_`$op`.tpl"}> ``` 8. 例如:`$op = 'snews_list';` 就執行 `snews_list()` 函數,並套用 `op_snews_list.tpl`樣板 ### 二、 XOOPS內建表單Class 1. PHP的Class(類)是一個物件藍圖 2. 要讓Class有作用需要經過實體化(new)的動作: ``` $物件 = new PHP_Class(); ``` 3. 物件會有所謂的方法(method)其實就是函數,讓您對此物件進行設、取值或執行特定物件功能: ``` $物件->方法(); ``` 4. XOOPS的表單物件設定完,最後都需要進行`$物件->render();`以產生程式碼。 5. 詳細的XOOPS 表單類別請參考:
6. 從 2.5.9 起,表單物件可以支援 BootStrap3 囉! 7. 要使用內建表單需先引入此行: ``` include_once(XOOPS_ROOT_PATH."/class/xoopsformloader.php"); ``` 8. 建立一個表單(
): ``` $form = new XoopsThemeForm('標題', 'name', 'main.php', 'post', '使用token' , '摘要'); ``` 9. 把表單元件加入表單中的方法([http://api.xoops.org/2.5.9/class-XoopsForm.html#\_addElement](http://api.xoops.org/2.5.9/class-XoopsForm.html#_addElement)): ``` $form->addElement($元件變數, $是否必填); ``` 10. 基本的表單元件: ``` $標籤元件 =new XoopsFormLabel('標題', '內容'); $文字輸入=new XoopsFormText('標題', 'name', 大小 , 最大長度 , '值'); $隱藏欄位 =new XoopsFormHidden('name', '值'); $安全檢查 =new XoopsFormHiddenToken('XOOPS_TOKEN',360); //上傳欄位 $form->setExtra("enctype='multipart/form-data'"); $File =new XoopsFormFile('標題', 'name', '2048'); $密碼欄位=new XoopsFormPassword('標題', 'name', 大小, 最大長度, '值'); $大量文字=new XoopsFormTextArea('標題', 'name', '值' , 列高 , 欄寬); $文字日期=new XoopsFormTextDateSelect('標題', 'name', 大小, '值'); $日期時間=new XoopsFormDateTime('標題', 'name', 大小, '值'); $XOOPS編輯器=new XoopsFormDhtmlTextArea('標題' , 'name', '值' , 欄寬 , 列高); $按鈕 =new XoopsFormButton('標題', 'name', '值', '類型'); ``` 11. 所有有選項的表單元件: ``` $複選方塊 = new XoopsFormCheckBox('標題', 'name', '值','id'); $單選鈕 = new XoopsFormRadio('標題', 'name', '值'); $是否單選=new XoopsFormRadioYN('標題', 'name', '值'); $下拉選單=new XoopsFormSelect('標題', 'name', '預設值', 大小, 多選); $群組核選=new XoopsFormSelectCheckGroup('標題', 'name', '值', 大小 ,多選); $國家選單=new XoopsFormSelectCountry('標題', 'name', 'TW', 大小); $編輯器選單=new XoopsFormSelectEditor(&$form, 'name', '值', 使用HTML , 可選編輯器陣列); $群組選單=new XoopsFormSelectGroup('標題', 'name', 含訪客, '值', 大小 ,多選); $語系選單=new XoopsFormSelectLang('標題', 'name', '值', 大小); $比對選單=new XoopsFormSelectMatchOption('標題', 'name', '值', 大小); $佈景選單=new XoopsFormSelectTheme('標題', 'name', '值', 大小); $時區選單=new XoopsFormSelectTimezone('標題', 'name', '值', 大小); $使用者選單=new XoopsFormSelectUser('標題', 'name', 含訪客, '值', 大小 ,多選); ``` 12. 新增選項方式有兩種,第一種是一個一個加入: ``` $表單元件->addOption('選單值1', '顯示值1', false); ``` 13. 第二種是先設好選項陣列,一次加入。(和上面那種方法可以同時使用) ``` $options['選單值2']='顯示值2'; $options['選單值3']='顯示值3'; $表單元件->addOptionArray($options); ``` 14. 產生表單程式碼並傳回: ``` $snews_form=$form->render(); ``` ### 三、 加入 TinyMCE 編輯器 1. 所見即所得編輯器來說,XOOPS僅內建 TinyMCE 編輯器 ``` include_once XOOPS_ROOT_PATH . "/class/xoopseditor/tinymce/formtinymce.php"; $options['caption'] = "文章內容"; $options['name'] = 'content'; $options['value'] = $content; $options['width'] = '100%'; $options['height'] = '400px'; $form->addElement(new XoopsFormTinymce($options)); ``` ### 四、 改用 CKEditor 編輯器 1. tadtools 中有內建 CKEditor 。 ``` include_once XOOPS_ROOT_PATH . "/modules/tadtools/ck.php"; $ck = new CKEditor("snews", "content", $content); $ck->setHeight(350); $editor = $ck->render(); $form->addElement(new XoopsFormLabel('文章內容', $editor)); ``` 2. 設定工具列: ``` $ck->setToolbarSet('tadSimple'); ``` 3. 有四個值可用:`my`、`myBasic`、`mySimple`、`tadSimple` ### 五、 資料過濾檢查 1. 存入時,若有特殊符號,如:「\\」、「"」、「'」,若沒有處理,那麼可能無法存入。我們利用內建的 `MyTextSanitizer `文字過濾工具來處理 ``` $myts = MyTextSanitizer::getInstance(); $過濾後的文字=$myts->addSlashes($過濾前文字); ``` 2. `addSlashes()`會針對文字中的特殊符號加入脫逸斜線,以順利存入資料庫中,非常常用。 3. 利用簡單的迴圈,搭配可變變數,可將所有傳過來的值都過濾(偷懶法,請斟酌使用) ``` foreach ($_POST as $k => $v) { $$k = $myts->addSlashes($v); } ``` ### 六、 $xoopsDB資料庫物件 1. XOOPS用來操作資料庫的物件為 `$xoopsDB` 2. `$xoopsDB` 已經內建,無須自行實體化,直接用即可。 3. 若是在函數中要使用`$xoopsDB`樣板物件,記得用`global $xoopsDB`,才能使用。 4. 常用方法(完整方法可參考:
): ``` $tbl = $xoopsDB->prefix('資料表名稱'); //自動加上資料表前置字串 $xoopsDB->query($sql); //執行SQL語法(較安全) $xoopsDB->queryF($sql); //強制執行SQL語法 $sn=$xoopsDB->getInsertId(); //取得最後新增的編號 $data=$xoopsDB->fetchRow($result); //抓回以數字為索引的資料陣列,得到的結果會像:$data[0]、$data[1]、$data[2]...這樣的,可搭配list($sn,$title,$content)=$data 來將內容指派到變數中。 $data=$xoopsDB->fetchArray($result); //抓回以欄名為索引的資料陣列,得到的結果會像:$data['sn']、$data['title']、$data['content']...這樣的 ``` ### 七、 用$xoopsUser 使用者物件取得使用者資料 1. 當使用者登入後才會有 `$xoopsUser` 物件,若沒有該物件表示未登入。 2. 幾個常用的`$xoopsUser`物件方法: ``` $使用者編號 = $xoopsUser->uid(); $真實姓名 = $xoopsUser->name(); $登入帳號= $xoopsUser->uname(); $Email= $xoopsUser->email(); $個人網站= $xoopsUser->url(); $使用者頭像= $xoopsUser->user_avatar(); //會傳回如:avatars/cavt50877193c9788.png ``` 3. 避免沒登入就使用`$xoopsUser`物件導致錯誤: ``` $uid = ($xoopsUser)?$xoopsUser->uid():0; ``` 4. 以uid 取得使用者名稱 (非目前登入者) ``` $uid_name = XoopsUser::getUnameFromId($uid,1); if(empty($uid_name))$uid_name=XoopsUser::getUnameFromId($uid,0); ``` ### 八、 TadTools內建的上傳工具$TadUpFiles(非XOOPS內建工具) 1. 建議開啟`/modules/tadtools/TadUpFiles.php`來觀看使用,說明寫在裡面 2. 先到資料庫建立指定資料表 `xx_snews_files_center`,並將該表結構加入`mysql.sql` ``` CREATE TABLE `模組名稱_files_center` ( `files_sn` smallint(5) unsigned NOT NULL AUTO_INCREMENT COMMENT '檔案流水號', `col_name` varchar(255) NOT NULL default '' COMMENT '欄位名稱', `col_sn` smallint(5) unsigned NOT NULL default 0 COMMENT '欄位編號', `sort` smallint(5) unsigned NOT NULL default 0 COMMENT '排序', `kind` enum('img','file') NOT NULL default 'img' COMMENT '檔案種類', `file_name` varchar(255) NOT NULL default '' COMMENT '檔案名稱', `file_type` varchar(255) NOT NULL default '' COMMENT '檔案類型', `file_size` int(10) unsigned NOT NULL default 0 COMMENT '檔案大小', `description` text NOT NULL COMMENT '檔案說明', `counter` mediumint(8) unsigned NOT NULL default 0 COMMENT '下載人次', `original_filename` varchar(255) NOT NULL default '' COMMENT '檔案名稱', `hash_filename` varchar(255) NOT NULL default '' COMMENT '加密檔案名稱', `sub_dir` varchar(255) NOT NULL default '' COMMENT '檔案子路徑', PRIMARY KEY (`files_sn`) ) ENGINE=MyISAM; ``` 3. 初始劃上物件,並加在前後台都讀得到的`function.php`中 ``` include_once XOOPS_ROOT_PATH . "/modules/tadtools/TadUpFiles.php"; $TadUpFiles = new TadUpFiles("snews"); ``` 4. 將上傳欄位加入表單中(`$允許格式`,如:`.jpg,.png`) ``` $form->setExtra("enctype='multipart/form-data'"); $TadUpFiles->set_col('sn', $sn); $upform=$TadUpFiles->upform($顯示編輯, $名稱, $數量, $顯示列表, $允許格式, $顯示縮圖); $form->addElement(new XoopsFormLabel('上傳封面圖', $upform)); ``` 5. 儲存文章,取得文章編號後,執行上傳: ``` $TadUpFiles->set_col($sn, $sn); $TadUpFiles->upload_file('$名稱', $圖寬, $縮圖寬, $更新編號 , $圖說, $安全檔名, $檔名加密, $指定傳回值, $允許格式); ``` ### 九、用PHPDoc寫註解 1. 在VS Code 可安裝 PHP DocBlocker 2.
### [
第二週模組下載](https://www.tad0616.net/uploads/tad_book3/file/44/snews_2.zip)
:::
搜尋
search
進階搜尋
QR Code 區塊
快速登入
所有討論區
「PHP全端開發」線上課程討論區
XOOPS使用討論區
一般研習學員
社大學員專用
路過哈啦區
XOOPS佈景設計
XOOPS模組開發
Tad書籍區
即時留言簿
書籍目錄
展開
|
闔起
線上使用者
86
人線上 (
17
人在瀏覽
線上書籍
)
會員: 0
訪客: 86
更多…