:::

2. 後台頁面與表單物件

一、 今天要做的流程:

  1. 產生資料庫架構檔,安裝時才會自動建立出所需的資料表(務必再安裝模組前完成)
  2. 建立後台管理頁面,需先設定好後台選單,並建立該檔案的樣板以及相關語系。
  3. 編輯樣板檔,建立刊物建立表單,並使之可以存入資料庫。

二、 匯出SQL檔案

  1. http://163.26.52.243/~帳號/modules/tad_adm/pma.php
  2. 儲存至模組的sql目錄下為mysql.sql,並將裡面的一些註解及 set 刪除,避免日後模組無法安裝。
  3. 修改 xoops_version.php:
    $modversion['sqlfile']['mysql'] = "sql/mysql.sql";
    $modversion['tables'][1] = "ebook";
    $modversion['tables'][2] = "ebook_page";
  4. 至此已經可以將模組安裝起來囉!

三、 XOOPS的模組管理後台

  1. XOOPS並沒有規定一定要有管理後台,若是沒有管理後台,只要在xoops_version.php中把$modversion['hasAdmin']設為0即可。
  2. $modversion['adminindex'] = 'admin/index.php'; 定義當使用者點選模組管理時,要連到的後台預設頁面。
  3. $modversion['adminmenu'] = 'admin/menu.php'; 定義後台模組管理界面的其他功能選單。

四、 模組管理後台選單檔

  1. 每多一個功能選項,請多一組以下設定,其中路徑部份是以該模組目錄為基準(頭尾那兩組設定無須動它,改中間那組即可)。
    //多個選項
    $i++;
    //選項標題
    $adminmenu[$i]['title'] = _MI_TAD_EBOOK_ADMENU1;
    //選項連結
    $adminmenu[$i]['link'] = "admin/main.php";
    //選項說明
    $adminmenu[$i]['desc'] = _MI_TAD_EBOOK_ADMENU1_DESC ;
    //選項圖示
    $adminmenu[$i]['icon'] = 'images/admin/ebook.png' ;
  2. 有中文的地方盡量用語系常數,直打中文也行,只是這樣只有相同編碼的網站才能使用。
  3. admin/menu.php的語系一樣是放在language/tchinese_utf8/modinfo.php中。
    define('_MI_TAD_EBOOK_ADMENU1' , '電子刊物管理');
    define('_MI_TAD_EBOOK_ADMENU1_DESC' , '電子刊物管理');

五、 模組管理後台架構

  1. 後台檔案最基本架構如admin/main.php,樣板檔位置在templates下,一般建議命名規則為「模組名_目錄_檔名.html」。樣板要在引入header.php之前設定好。
    //設定樣板檔(必)
    $xoopsOption['template_main'] = "tad_ebookadm_main.html"; 
    //引入預設檔頭(必)
    include_once "header.php";
    //引入共同函數檔
    include_once "../function.php";
  2. 請將templates/demo_adm_index.html改為實際樣板名稱(連同b3樣板一起改)。
  3. xxx_b3.html是bootstrap3的樣板,等日後預設樣板做好後,再來轉為b3樣板即可。
  4. 頁尾需引入頁尾檔。至於中間部份隨人習慣任意發揮。
    include_once 'footer.php';
  5. 【重要】記得修改 xoops_version.php中的樣板設定,改完請更新模組,以套用新值。

六、 物件的基本動作

  1. PHP的Class(類)是一個物件藍圖
  2. 要讓Class有作用需要經過實體化(new)的動作:$物件 = new PHP_Class();
  3. 物件會有所謂的方法(method)其實就是函數,讓您對此物件進行設、取值或執行特定物件功能:$物件->方法();
  4. XOOPS的表單物件設定完,最後都需要進行$物件->render();以產生程式碼。
  5. 詳細的XOOPS Class請參考:http://api.xoops.org/2.5.6/annotated.html

七、 XOOPS內建表單Class

  1. 要使用內建表單需先引入此行:
    include_once(XOOPS_ROOT_PATH."/class/xoopsformloader.php");
  2. 建立一個表單:
    $form = new XoopsThemeForm('表單標題', 'name', 'action.php', 'post', '使用token' , '摘要');
  3. 把表單元件加入表單中的方法:
    $form->addElement($元件變數);
  4. 把幾個元件組合在一起,並放到表單中:
    $Tray=new XoopsFormElementTray('標題', ' ', 'name');
    $Tray->addElement(new XoopsFormButton('', 'name', '送出', 'submit'));
    $Tray->addElement(new XoopsFormButton('', 'name', '清除', 'reset'));
    $form->addElement($Tray);
  5. 產生表單程式碼:
    $f=$form->render();
  6. 各種表單元件:
    //標籤元件
    $Label =new XoopsFormLabel('標題', '內容');
    //文字輸入
    $Text=new XoopsFormText('標題', 'name', 大小 , 最大長度 , '值');
    //隱藏欄位
    $Hidden =new XoopsFormHidden('name', '值');
    //安全檢查
    $Token =new XoopsFormHiddenToken('XOOPS_TOKEN',360);
    //上傳欄位
    $form->setExtra("enctype='multipart/form-data'");
    $File =new XoopsFormFile('標題', 'name', '2048');
    //密碼欄位
    $Password=new XoopsFormPassword('標題', 'name', 大小, 最大長度, '值');
    //大量文字
    $TextArea=new XoopsFormTextArea('標題', 'name', '值' , 欄寬 , 列高 , 'id');
    //文字日期
    $DateSelect=new XoopsFormTextDateSelect('標題', 'name', 15, 0);
    //日期時間
    $DateTime=new XoopsFormDateTime('標題', 'name', 15, 0);
    //XOOPS編輯器
    $DhtmlTextArea=new XoopsFormDhtmlTextArea('標題' , 'name',  '值' , 欄寬 , 列高);
    //按鈕
    $Button =new XoopsFormButton('標題', 'name', '值', '類型');
  7. 有選項的表單元件,其選項預設值得設定方式為:
    $表單元件->setValue($多重預設值陣列);
  8. 新增選項方式有兩種,第一種是一個一個加入:
    $表單元件->addOption('選單值1', '顯示值1', false);
  9. 第二種是先設好選項陣列,一次加入。(和上面那種方法可以同時使用)
    $options['選單值2']='顯示值2';
    $options['選單值3']='顯示值3';
    $表單元件->addOptionArray($options);
  10. 所有有選項的表單元件:
    //複選方塊
    $CheckBox = new XoopsFormCheckBox('標題', 'name', '值','id');
    //單選鈕
    $Radio = new XoopsFormRadio('標題', 'name', '值');
    //是否單選
    $RadioYN=new XoopsFormRadioYN('標題', 'name', '值');
    //下拉選單
    $Select=new XoopsFormSelect('標題', 'name', '預設值', 大小, 多選);
    //群組核選
    $SelectCheckGroup=new XoopsFormSelectCheckGroup('標題', 'name', '值', 大小 ,多選);
    //國家選單
    $SelectCountry=new XoopsFormSelectCountry('標題', 'name', 'TW', 大小);
    //編輯器選單
    $SelectEditor=new XoopsFormSelectEditor(&$form, 'name', '值', 使用HTML , 可選編輯器陣列);
    //群組選單
    $SelectGroup=new XoopsFormSelectGroup('標題', 'name', 含訪客, '值', 大小 ,多選);
    //語系選單
    $SelectLang=new XoopsFormSelectLang('標題', 'name', '值', 大小);
    //比對選單
    $SelectMatchOption=new XoopsFormSelectMatchOption('標題', 'name', '值', 大小);
    //佈景選單
    $SelectTheme=new XoopsFormSelectTheme('標題', 'name', '值', 大小);
    //時區選單
    $SelectTimezone=new XoopsFormSelectTimezone('標題', 'name', '值', 大小);
    //使用者選單
    $SelectUser=new XoopsFormSelectUser('標題', 'name', 含訪客, '值', 大小 ,多選);

八、 在內建表單元件加入額外設定

  1. 利用$表單元件->setExtra()的方法,可以在表單元件中加入任何額外的語法。
    $Text->setExtra("class='span12'");
    $Text->setExtra("style='width: 90%'");
    $Text->setExtra("placeholder='請輸入標題'");

九、 $xoopsTpl 樣板物件,將程式執行結果傳送至樣板

  1. 樣板(template)是使用者眼睛看到的界面,我們經由程式產生的任何結果,都可以傳送至樣板以便呈現在畫面上。
  2. 若是在函數中要使用$xoopsTpl樣板物件,記得用global $xoopsTpl,才能使用。
  3. 其用法如下:
    $xoopsTpl->assign('樣板標籤' , $呈現的內容);
  4. 在樣板檔中(如:tad_ebookadm_main.html),用<{$樣板標籤}>來顯示其內容。

十、 $xoopsDB資料庫物件的幾個常用方法

  1. 若是在函數中要使用$xoopsDB樣板物件,記得用global $xoopsDB,才能使用。
  2. $xoopsDB->prefix('資料表名稱') 自動加上資料表前置字串
  3. $xoopsDB->query($sql) 及$xoopsDB->queryF($sql) 執行SQL語法
  4. $xoopsDB->getInsertId() 取得最後新增的編號
  5. $xoopsDB->fetchRow($result) 抓回以數字為索引的資料陣列
    • (1)  得到的結果會像:$data[0]、$data[1]、$data[2]...這樣的
    • (2)  可搭配list($sn,$title,$content)=$data 來將內容指派到變數中。
  6. $xoopsDB->fetchArray($result)抓回以欄名為索引的資料陣列
    • (1)  得到的結果會像:$data['sn']、$data['title']、$data['content']...這樣的
  7. 寫入範例:
    //替資料表加入前置字串
    $tbl=$xoopsDB->prefix('ebook');
    //寫入資料庫的SQL語法
    $sql="insert into $tbl (`ebook_title` , `ebook_post_date` , `ebook_publish_date`) values('$ebook_title' , '$ebook_post_date' , '$ebook_publish_date')";
    //送到資料庫執行SQL
    $xoopsDB->query($sql) or die(mysql_error());
    //取得新增資料的編號
    $ebook_sn=$xoopsDB->getInsertId();

十一、 建立必填欄位

  1. 建立表單時new XoopsThemeForm(),一定要設定name。
  2. 新增元件時addElement(),第二個參數設為true。

十二、 建立安全的表單

  1. 表單加入「安全檢查」的表單元件。 new XoopsFormHiddenToken();
  2. 儲存或更新時,請加入以下這段檢查語法,若不是合法表單,會被轉向到首頁:
    //安全判斷
    if(!$GLOBALS['xoopsSecurity']->check()){
      //錯誤訊息
      $error=implode("<br />" , $GLOBALS['xoopsSecurity']->getErrors());
      //轉向到首頁
      redirect_header($_SERVER['PHP_SELF'],3, $error);
    }

十三、 從資料庫讀出資料

  1. 寫好SQL的select讀出語法,並利用 order by `欄位` 來進行排序。
  2. 利用while()迴圈,抓出所有資料,利用「.」(字串連接符)集成所有內容後,套進樣板檔中以便呈現。
    //替資料表加入前置字串
    $tbl=$xoopsDB->prefix('ebook');
    //讀出資料庫的SQL語法
    $sql="select * from $tbl order by ebook_post_date desc";
    //送到資料庫執行SQL
    $result=$xoopsDB->query($sql) or die(mysql_error());
    //建立內容初始值
    $list_ebook="<h2>現有刊物列表</h2>";
    //用迴圈依序抓出資料
    while($ebook = $xoopsDB->fetchArray($result)){
      //將抓出資料集成內容
      $list_ebook.="<li>{$ebook['ebook_title']} ({$ebook['ebook_post_date']} 截稿, {$ebook['ebook_publish_date']} 發行)</li>";
    }
    //套入樣板檔中
    $xoopsTpl->assign('list_ebook' , $list_ebook);
  3. 樣板檔中記得用 <{$list_ebook}> 來顯示出所有內容。
  4. 若是在函數中要同時使用 $xoopsDB 及 $xoopsTpl 物件,可用「global $xoopsDB,$xoopsTpl;」,用逗號隔開,以便在函數中使用之。
  5. 目前用字串連接符把所有內容串起來的作法並非最佳方法,下次會說明如何做成樣板標籤的陣列值,使之彈性更大。

:::

搜尋

QR Code 區塊

https%3A%2F%2Fwww.tad0616.net%2Fmodules%2Ftad_book3%2Fpage.php%3Ftbsn%3D37%26tbdsn%3D1122

書籍目錄

展開 | 闔起

線上使用者

21人線上 (5人在瀏覽線上書籍)

會員: 0

訪客: 21

更多…