:::

2. 表單、資料庫、使用者物件

上週模組下載

一、 關於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 表單類別請參考:http://api.xoops.org/2.5.9/class-XoopsForm.html
  6. 從 2.5.9 起,表單物件可以支援 BootStrap3 囉!
  7. 要使用內建表單需先引入此行:
    include_once(XOOPS_ROOT_PATH."/class/xoopsformloader.php");
  8. 建立一個表單(http://api.xoops.org/2.5.9/class-XoopsThemeForm.html):
    $form = new XoopsThemeForm('標題', 'name', 'main.php', 'post', '使用token' , '摘要');
  9. 把表單元件加入表單中的方法(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. 有四個值可用:mymyBasicmySimpletadSimple

五、 資料過濾檢查

  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. 常用方法(完整方法可參考:http://api.xoops.org/2.5.9/class-XoopsMySQLDatabaseSafe.html):
    $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. http://oomusou.io/phpstorm/phpstorm-phpdoc/

第二週模組下載


:::

搜尋

QR Code 區塊

https%3A%2F%2Ftad0616.net%2Fmodules%2Ftad_book3%2Fpage.php%3Ftbsn%3D44%26tbdsn%3D1431

書籍目錄

展開 | 闔起

線上使用者

49人線上 (11人在瀏覽線上書籍)

會員: 0

訪客: 49

更多…