Toggle main menu visibility
新聞
下載
教材
影音
討論
其他選單
好站連結
行事曆
電子相簿
常見問題
萬用表單
即時留言簿
友站消息
社大學員
:::
登入
登入
帳號
密碼
登入
重整畫面
:::
所有書籍
「[1071]XOOPS模組開發」目錄
MarkDown
2-7 function.php
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
3-1 index.php
\[1071\]XOOPS模組開發 ================= ### 一、 前台讀出資料 1. 前台基本架構 ``` assign("toolbar", toolbar_bootstrap($interface_menu)); ``` 5. 記得在樣板加入`<{$toolbar}>`即可 ### 三、 從資料庫中讀取資料 1. 讀取資料庫的內容,一律用 `select `語法: ``` SELECT `查詢的欄位` [FROM `資料表名稱` 附加的篩選條件] ``` 2. 其中篩選條件語法如下(有順序關係,需注意): ``` [where 篩選條件] [group by `欄位名稱`][having group的篩選條件] [order by {unsigned_integer | `欄位名稱` | formula} [asc | desc] ,...] [limit [起點,] 筆數] ``` 3. 在函數中會用到 `$xoopsDB`, `$xoopsTpl`, `$TadUpFiles` 物件,故記得進行 `global` 宣告。 4. 利用 `$xoopsDB->query()` 送出資料,並將傳回的控制器存至變數中,例如`$result`。 5. 利用 `$snews=$xoopsDB->fetchArray($result)` 取得該資料的陣列。 其中,`$snews` 的陣列內容如: `$snews['sn']`、`$snews['title']`...等同PHP的`$result->fetch_assoc()` ### 四、 取得上傳的檔案列表 1. 利用`$TadUpFiles->show_files()`可取得所有上傳檔案的列表。其詳細參數為`show_files($上傳欄位名稱, $是否顯示縮圖, $顯示模式, $顯示說明, $顯示下載, $呈現數量, $路徑, $是否加密, $播放速度, $以說明取代檔名, $關鍵字, $僅顯示有關建字檔案, $連結開啟位置)`,基本上,除了第一個以外,其餘皆非必填。 ``` $TadUpFiles->set_col('sn', $sn); $show_files = $TadUpFiles->show_files('pic', true, '', true, null, null, null, true); ``` 2. 顯示模式可以是:`空值`(縮圖)、`small`(小圖示)、`filename`(文字列表)、`file_url`(連結)、`file_text_url`(文字連結) ### 五、 讀出資料的安全性過濾 1. 當初存入時會希望完整存入,固有可能會存入一些危險語法(如果有的話),因此,從資料庫讀出資料時必須過濾一些可能會危害網站的語法。 2. 根據資料量分為兩類,一種是大量文字類(例如textarea大量文字框或CKEditor編輯器的欄位),另一種則是一般資料,如姓名、數字...等。 ``` $myts = MyTextSanitizer::getInstance(); $snews['content'] = $myts->displayTarea($snews['content'], 1, 0, 0, 0, 0); $snews['title'] = $myts->htmlSpecialChars($snews['title']); ``` 3. 呈現大量文字: `$myts->displayTarea($text, $html=0, $smiley=1, $xcode=1, $image=1, $br=1);` - (1) 「`$text`」就是要被處理之後呈現的文字。 - (2) 「`$html`」是否允許使用HTML語法,**用所見即所得編輯器製作出來的請填 1**。 - (3) 「`$smiley`」是否轉換表情圖,預設為1,會將:) 這類的符號轉換為圖片。 - (4) 「`$xcode`」是否使用BBCode,如:\[color=red\]文字\[/color\]。 - (5) 「`$image`」是否允許在文字中使用圖片。若為0,圖片會以連結來顯示。 - (6) 「`$br`」是否要將「`\n`」換行符轉換為`
`,**用所見即所得編輯器者請設為 0**。 4. 呈現一般文字:` $myts->htmlSpecialChars($text, $quote_style=ENT_QUOTES, $charset= null, $double_encode=true);` - (1) 「`$text`」就是要被處理之後呈現的文字。 - (2) 「`$quote_style`」要處理的引號模式,「`ENT_COMPAT`」僅處理雙引號;「`ENT_QUOTES`」處理雙引號和單引號(預設);「`ENT_NOQUOTES`」不對任何引號進行處理。 - (3) 「`$charset`」轉換的預設編碼,通常使用預設值即可。 - (4) 「`$double_encode`」只有PHP 5.2.3之後才有效。若設為false,則不對現有的HTML實體做編碼的動作。 ### 六、 取得上傳的單一圖案 1. 利用`$TadUpFiles->get_pic_file()`可取得指定的檔案。其詳細參數為`get_pic_file($顯示模式, $顯示種類, $檔案編號, $是否加密)`,搭配`set_col()`,可取得一個圖案。 ``` $TadUpFiles->set_col('sn', $sn, 1); $file = $TadUpFiles->get_pic_file(); ``` 2. 「`$顯示模式`」可以是:`images`(大圖,預設)、`thumb`(小圖),`file`(檔案) 3. 「`$顯示種類`」可以是:`url`(連結網址,預設)、`dir`(實體路徑) 4. 隨機假圖:[https://picsum.photos/400/200?image={$article@index}](https://picsum.photos) 5. 縮圖樣式部份:
``` img.cover { width: 100%; height: 200px; object-fit: cover; } ``` ### 七、 XOOPS中Smarty迴圈相關用法 1. Smarty迴圈用來處理陣列,常用方法如下: ``` <{foreach from=$來源變數 item=$別名 name=迴圈別名}> <{$別名.索引}> <{foreachelse}> 該變數沒有值時要出現的內容 <{/foreach}> ``` 2. 迴圈還有一些特別的用法: ``` <{$smarty.foreach.迴圈別名.first}> 迴圈第一圈 <{$smarty.foreach.迴圈別名.last}> 迴圈最後一圈 <{$smarty.foreach.迴圈別名.index}> 取得迴圈的索引值,依序輸出0、1、2...... <{$smarty.foreach.迴圈別名.iteration}> 取得迴圈的計數值,依序輸出1、2、3...... <{$smarty.foreach.迴圈別名.total}> 取得迴圈執行總數 ``` ### 八、 修改判斷管理權限機制 1. 原本的`$isAdmin`稍嫌麻煩,在函數中或樣板中使用必須`global`或`assign`,改為`session`會方便許多。 ``` if (!isset($_SESSION['isAdmin'])) { $_SESSION['isAdmin'] = ($xoopsUser) ? $xoopsUser->isAdmin() : false; } ``` 2. 在樣板中,可以利用`<{$smarty.session.isAdmin}>`來判斷是否對該模組有管理權 ``` <{if $smarty.session.isAdmin}>
修改文章
<{/if}> ``` ### 九、 修改資料 1. 表單部份請加一個$sn參數,若有,表示編輯,若無,表示新增,此外,修改隱藏欄位 ``` if ($sn) { $form->addElement(new XoopsFormHidden('op', 'snews_update')); $form->addElement(new XoopsFormHidden('sn', $sn)); } else { $form->addElement(new XoopsFormHidden('op', 'snews_insert')); } ``` 2. 最後製作修改內容的函數即可。更新語法為: ``` update `資料表名稱` set `欄位1`='值1', `欄位2`='值2', ... [where 篩選條件] [limit 筆數] ``` 3. 其中建立日期、計數器(若有)不用更新,uid則視情況,各有優缺點。 ### 十、 刪除資料 1. 開啟`tadtools/sweet_alert.php`,裡面有範例 ``` include_once XOOPS_ROOT_PATH . "/modules/tadtools/sweet_alert.php"; $sweet_alert = new sweet_alert(); $sweet_alert->render("snews_delete", "index.php?op=snews_delete&sn=", 'sn'); ``` 2. 上面語法會產生刪除的javascript函數,完整函數為 `snews_delete(sn)`; 3. 在樣板檔加入: ```
刪除
``` 4. 接著新增流程,並製作 `snews_delete()` 刪除函數即可,刪除的SQL語法為 ``` delete from `資料表名稱` [where 篩選條件] [limit 筆數] ``` 5. 函數如: ``` function snews_delete($sn) { global $xoopsUser, $xoopsDB, $TadUpFiles; $tbl = $xoopsDB->prefix('snews'); $uid = $xoopsUser->uid(); $and_uid = $_SESSION['isAdmin'] ? "and `uid`='$uid'" : ''; $sql = "delete from `$tbl` where `sn`='$sn' $and_uid"; $result = $xoopsDB->queryF($sql) or web_error($sql); $TadUpFiles->set_col('sn', $sn); $TadUpFiles->del_files(); } ``` 6. 刪除時,若非管理員,則判斷是否為發布者本人始能刪除,此外,記得也要刪除檔案。 ### 十一、避免偽造表單 1. 請在儲存或更新時加入以下檢查 ``` //安全判斷 if(!$GLOBALS['xoopsSecurity']->check()){ $error=implode("
" , $GLOBALS['xoopsSecurity']->getErrors()); throw new Exception($error); } ``` ### [
第三週模組下載](https://www.tad0616.net/uploads/tad_book3/file/44/snews_3.zip)
:::
搜尋
search
進階搜尋
QR Code 區塊
快速登入
所有討論區
「PHP全端開發」線上課程討論區
XOOPS使用討論區
一般研習學員
社大學員專用
路過哈啦區
XOOPS佈景設計
XOOPS模組開發
Tad書籍區
即時留言簿
書籍目錄
展開
|
闔起
線上使用者
81
人線上 (
22
人在瀏覽
線上書籍
)
會員: 0
訪客: 81
更多…