2.
表單、資料庫、使用者物件
一、 關於XOOPS的樣板引擎
- XOOPS的樣板引擎是使用 smarty 2.6.x(所以,新的 smarty 3.x 語法無法使用)
- 頁面的主樣板檔用
$xoopsOption['template_main']
來指定,需註冊到xoops_version.php
中的$modversion['templates']
中,如此,XOOPS會自動將之存入資料庫,提供線上編輯樣板或模組自訂樣板功能。
- 樣板檔副檔名可為.html或.tpl(建議)
- XOOPS的樣板引擎物件為
$xoopsTpl
,在php檔中套用變數到樣板的語法為:
$xoopsTpl ->assign( '樣板變數名稱' , $PHP 變數); |
- 在樣板中,則是使用以下方式來呈現變數:
- 樣板檔中亦可引入(用db)其他樣板檔(
$xoops_rootpath
是XOOPS實際安裝路徑):
<{includeq db="$xoops_rootpath/modules/模組名稱/templates/有註冊的樣板檔.tpl"}> |
- 可把流程中的每個需顯示的op動作,獨立做成樣板檔,然後自動引入(用file無須註冊)
<{includeq file="$xoops_rootpath/modules/模組名稱/templates/op_`$op`.tpl"}> |
- 例如:
$op = 'snews_list';
就執行 snews_list()
函數,並套用 op_snews_list.tpl
樣板
二、 XOOPS內建表單Class
- PHP的Class(類)是一個物件藍圖
- 要讓Class有作用需要經過實體化(new)的動作:
- 物件會有所謂的方法(method)其實就是函數,讓您對此物件進行設、取值或執行特定物件功能:
- XOOPS的表單物件設定完,最後都需要進行
$物件->render();
以產生程式碼。
- 詳細的XOOPS 表單類別請參考:http://api.xoops.org/2.5.9/class-XoopsForm.html
- 從 2.5.9 起,表單物件可以支援 BootStrap3 囉!
- 要使用內建表單需先引入此行:
include_once (XOOPS_ROOT_PATH. "/class/xoopsformloader.php" ); |
- 建立一個表單(http://api.xoops.org/2.5.9/class-XoopsThemeForm.html):
$form = new XoopsThemeForm( '標題' , 'name' , 'main.php' , 'post' , '使用token' , '摘要' ); |
- 把表單元件加入表單中的方法(http://api.xoops.org/2.5.9/class-XoopsForm.html#_addElement):
$form ->addElement($元件變數, $是否必填); |
- 基本的表單元件:
$標籤元件 = 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' , '值' , '類型' ); |
- 所有有選項的表單元件:
$複選方塊 = 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' , 含訪客, '值' , 大小 ,多選); |
- 新增選項方式有兩種,第一種是一個一個加入:
$表單元件->addOption( '選單值1' , '顯示值1' , false); |
- 第二種是先設好選項陣列,一次加入。(和上面那種方法可以同時使用)
$表單元件->addOptionArray( $options ); |
- 產生表單程式碼並傳回:
$snews_form = $form ->render(); |
三、 加入 TinyMCE 編輯器
- 所見即所得編輯器來說,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 編輯器
- tadtools 中有內建 CKEditor 。
include_once XOOPS_ROOT_PATH . "/modules/tadtools/ck.php" ; |
$ck = new CKEditor( "snews" , "content" , $content ); |
$form ->addElement( new XoopsFormLabel( '文章內容' , $editor )); |
- 設定工具列:
$ck ->setToolbarSet( 'tadSimple' ); |
-
有四個值可用:my
、myBasic
、mySimple
、tadSimple
五、 資料過濾檢查
- 存入時,若有特殊符號,如:「\」、「"」、「'」,若沒有處理,那麼可能無法存入。我們利用內建的
MyTextSanitizer
文字過濾工具來處理
$myts = MyTextSanitizer::getInstance(); |
$過濾後的文字= $myts -> addSlashes ($過濾前文字); |
addSlashes()
會針對文字中的特殊符號加入脫逸斜線,以順利存入資料庫中,非常常用。
- 利用簡單的迴圈,搭配可變變數,可將所有傳過來的值都過濾(偷懶法,請斟酌使用)
foreach ( $_POST as $k => $v ) { |
$ $k = $myts -> addSlashes ( $v ); |
六、 $xoopsDB資料庫物件
- XOOPS用來操作資料庫的物件為
$xoopsDB
$xoopsDB
已經內建,無須自行實體化,直接用即可。
- 若是在函數中要使用
$xoopsDB
樣板物件,記得用global $xoopsDB
,才能使用。
- 常用方法(完整方法可參考:http://api.xoops.org/2.5.9/class-XoopsMySQLDatabaseSafe.html):
$tbl = $xoopsDB ->prefix( '資料表名稱' ); |
$sn = $xoopsDB ->getInsertId(); |
$data = $xoopsDB ->fetchRow( $result ); |
$data = $xoopsDB ->fetchArray( $result ); |
七、 用$xoopsUser 使用者物件取得使用者資料
- 當使用者登入後才會有
$xoopsUser
物件,若沒有該物件表示未登入。
- 幾個常用的
$xoopsUser
物件方法:
$使用者編號 = $xoopsUser ->uid(); |
$真實姓名 = $xoopsUser ->name(); |
$登入帳號= $xoopsUser ->uname(); |
$Email = $xoopsUser ->email(); |
$個人網站= $xoopsUser ->url(); |
$使用者頭像= $xoopsUser ->user_avatar(); |
- 避免沒登入就使用
$xoopsUser
物件導致錯誤:
1 | $uid = ( $xoopsUser )? $xoopsUser ->uid():0; |
- 以uid 取得使用者名稱 (非目前登入者)
$uid_name = XoopsUser::getUnameFromId( $uid ,1); |
if ( empty ( $uid_name )) $uid_name =XoopsUser::getUnameFromId( $uid ,0); |
八、 TadTools內建的上傳工具$TadUpFiles(非XOOPS內建工具)
- 建議開啟
/modules/tadtools/TadUpFiles.php
來觀看使用,說明寫在裡面
- 先到資料庫建立指定資料表
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 '檔案子路徑' , |
- 初始劃上物件,並加在前後台都讀得到的
function.php
中
include_once XOOPS_ROOT_PATH . "/modules/tadtools/TadUpFiles.php" ; |
$TadUpFiles = new TadUpFiles( "snews" ); |
- 將上傳欄位加入表單中(
$允許格式
,如:.jpg,.png
)
$form ->setExtra( "enctype='multipart/form-data'" ); |
$TadUpFiles ->set_col( 'sn' , $sn ); |
$upform = $TadUpFiles ->upform($顯示編輯, $名稱, $數量, $顯示列表, $允許格式, $顯示縮圖); |
$form ->addElement( new XoopsFormLabel( '上傳封面圖' , $upform )); |
- 儲存文章,取得文章編號後,執行上傳:
$TadUpFiles ->set_col( $sn , $sn ); |
$TadUpFiles ->upload_file( '$名稱' , $圖寬, $縮圖寬, $更新編號 , $圖說, $安全檔名, $檔名加密, $指定傳回值, $允許格式); |
九、用PHPDoc寫註解
- 在VS Code 可安裝 PHP DocBlocker
- http://oomusou.io/phpstorm/phpstorm-phpdoc/