4.
前台頁面與HTML表單
一、 寫入時的文字過濾(盡量能存)
- 存入時,若有特殊符號,如:「\」、「"」、「'」,若沒有處理,那麼可能無法存入。
$myts =& MyTextSanitizer::getInstance();
- 替特殊符號加入脫逸斜線,以順利存入資料庫中。若PHP的magic_quotes_gpc設定為on,那麼是不會再加上斜線的。
$myts->addSlashes(文字);
- 用來過濾不雅字元,需搭配XOOPS後台的「偏好設定→系統設定→敏感字詞檢查」設定來使用。
$myts->censorString(文字);
二、 讀出文章的文字過濾(過濾危險)
- 目的:過濾一些可能會危害網站的語法。
- 呈現大量文字:
$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」換行符轉換為<br />,用所見即所得編輯器者請設為0。
- 呈現一般文字:
$myts->htmlSpecialChars($text, $quote_style=ENT_QUOTES, $charset= 'ISO-8859-1', $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實體做編碼的動作。
三、 interface_menu.php 前台選單設定
- $isAdmin 會判斷目前登入者是否對此模組有管理權限。
- 每一組選項格式(記得實際生出對應檔案):
//點選後欲連結的檔案
$interface_menu[選項名稱]="index.php";
//Font Awesome 圖示
$interface_icon[選項名稱]="fa-chevron-right";
- http://fortawesome.github.io/Font-Awesome/icons/
四、 前台基本結構(新增投稿頁面post.php)
- 前台頁面基本格式(可複製index.php):
<?php
include_once "header.php";
$xoopsOption['template_main'] = set_bootstrap("bootstrap2樣板檔.html");
include_once XOOPS_ROOT_PATH."/header.php";
/***** 略 *****/
include_once XOOPS_ROOT_PATH.'/footer.php';
?>
- header.php是一個自製檔案(非XOOPS規範),會引入網站主設定檔mainfile.php 、自製的選單檔interface_menu.php、自製共同函數檔function.php
- 自製共同函數檔function.php中又會引入tadtools工具箱的tad_function.php
- set_bootstrap("bootstrap2樣板檔.html"); 用來自動判別需載入bootstrap2或bootstrap3,此檔案放在tadtools工具箱的tad_function.php中。
- bootstrap3樣板檔,只要在bootstrap2樣板檔名加上「_b3」即可。
- 記得實際生出樣板檔,並修改xoops_version.php後更新模組以讀取新設定。
五、 套用工具列到樣板上
- 在php檔尾前加入以下語法:
$xoopsTpl->assign( "toolbar" , toolbar_bootstrap($interface_menu)) ;
include_once XOOPS_ROOT_PATH.'/footer.php';
- toolbar_bootstrap($interface_menu) 會將選單設定做成bootstrap選單
- 在樣板檔中加上該標籤語法即可:<{$toolbar}>
六、 $xoopsUser 使用者物件(可用來判斷有無登入)
- 幾個常用的$xoopsUser物件方法:
- (1) $xoopsUser->uid():1 //使用者編號
- (2) $xoopsUser->name():吳大頭 //真實姓名
- (3) $xoopsUser->uname():tad //登入帳號
- (4) $xoopsUser->email():tad0616@gmail.com //Email
- (5) $xoopsUser->url():http://localhost/x25/ //個人網站
- (6) $xoopsUser->user_avatar():avatars/cavt50877193c9788.png //頭像
- 避免沒登入產生錯誤:$uid=($xoopsUser)?$xoopsUser->uid():0;
- 以uid取得使用者名稱
$uid_name=XoopsUser::getUnameFromId($uid,1);
if(empty($uid_name))$uid_name=XoopsUser::getUnameFromId($uid,0);
七、 自製表單(HTML表單)
- 文字框:<input type="text" name="名稱" value="預設值" size="大小">
- 隱藏框:<input type="hidden" name="名稱" value="預設值">
- 上傳框:<input type="file" name="名稱" size="大小">
- 送出鈕:<input type="submit" value="按鈕文字">
- 單選框:<input type="radio" name="名稱" value="值 1">選項文字 1
- (1) 單選框通常會有好幾個選項,一組選項就要一組<input>,name 都要一樣才行!
- (2) 若要預設選取,要加上 checked="checked"
- (3) 可以用<label for="id">選項</label>,以便點選文字就可以勾選該項目。
- 複選框:<input type="checkbox" name="名稱[]" value="值 1">選項文字 1
- (1) 複選框通常同時會有好幾個選項,一組選項就要一組<input>
- (2) name 都要一樣才行!而且因為是複選,所以 name 要加上[],如此會送出陣列。
- (3) 若要預設選取,要加上 checked="checked"
- 下拉選單:<select name="名稱" size=1>選項</select>
- (1) 選項:<option value="值">選項文字</option>
- a. 一組選項,就是一組<option>
- b. 若要預設選取:要在<option>中加入 selected="selected"
- (2) 若希望下拉選單可以複選,除了 name 要加上[]外,還要加上 multiple 屬性。
- 大量文字框:<textarea name="名稱" cols="欄寬" rows="列高">預設值</textarea>
- 可套用BootStrap來美化表單 https://kkbruce.tw/bs2/BaseCSS#forms
八、自己測試一下
輸入以下的內容到您的表單中,若是有跳出訊息或是看到影片,那就表示您的安全做得不夠好。
<script>alert('我要入侵了')</script>
<iframe width="420" height="315" src="http://www.youtube.com/embed/DC766xWLldM" frameborder="0" allowfullscreen></iframe>
九、所見即所得編輯器
if(!file_exists(XOOPS_ROOT_PATH."/modules/tadtools/ck.php")){
redirect_header("http://www.tad0616.net/modules/tad_uploader/index.php?of_cat_sn=50",3, _TAD_NEED_TADTOOLS);
}
include_once XOOPS_ROOT_PATH."/modules/tadtools/ck.php";
$fck=new CKEditor("模組名稱","欄位名稱",$預設值);
$fck->setHeight(350);
$editor=$fck->render();