Xoops進階筆記

  1. 概述
  2. 安裝與備份
  3. 基本操作
  4. 資料表
    2.0.1x
    2.2.4
    2.4及2.5版
  5. 外觀(布景)
  6. 將內容嵌入xoops
  7. 模組架構
  8. 官方模組及有用模組
    2.0.1x官方模組
    2.2.4有用模組
  9. 系統常數、變數、函式、物件
    1. 載入程序(mainfile,common)
    2. 常數
    3. 全域變數
      $GLOBALS
      通道:15個POST、GET、COOKIE、SESSION、FILE、SERVER、ENV、$_REQUEST
      單一值:$xoopsRequestUri、$xoopsUserIsAdmin
      陣列:$xoopsConfig、$xoopsModuleConfig、$xoopsOption
      物件:12個
      $xoopsSecurity
      $xoopsErrorHandler
      $sess_handler
      $xoopsLogger
      $xoopsDB
      $config_handler
      $member_handler->_members[uid] 即 「$xoopsUser」
      $module_handle->loadModule() 得到「$xoopsModule」現用模組值物件
      $xTheme->tplEngine 即「$xoopsTpl」
    4. smarty可用全域變數
    5. 常用函式
    6. 核心數據類別XoopsObject
    7. 大型class
  10. smarty 介紹
  11. 工具
  12. 改xoops
諸模組
  1. piCal行事曆模組
    1. 資料表欄位說明
    2. 管理介面
    3. 使用介面
    4. 程式說明
    5. 修改模組 for 工作追蹤
    6. 修改模組 for 記工單
    7. 修改模組 for 會議
    8. 修改模組 for 「類別的瀏覽權限」
  2. 檔案上傳
  3. 線上表單

壹、概述

○、xoops:

  1. 可駕駛的架站機。
  2. 所有網站的共同元素集中管理,改一個地方,生效於所有地方。
  3. 共同的組版流程,達成布景共用。達成一網站內容,多外觀。
  4. 共同的功能開發流程,達成程式碼共用。(模組)
  5. 用設定調整一切。取代改寫程式碼。
  6. html和php分離。可將美工交給專人處理。
  7. 以模組為單位,每模組控制「資料表」「程式」「區塊(函式)」「樣版」「使用者自訂欄位」。

貳、安裝與備份

一、適用版本:

xoops版本 2.0.1x 2.2 2.2
Apache 1.3.x或2.x 2.0.52
PHP4 4.1.1以上,4.3.10以上最理想(4.3.9有漏洞) 4.3.10
PHP5 須搭Xoops2.0.9以上
MySQL 3.23.x 或 4.0.x 以上,4.1.x因認證改變,不建議使用。3.23.58 4.1
注意

二、下載及安裝:

(一)正式安裝:

  1. 到tw.xoops.org下載
  2. 到xoops.tnc.edu.tw下載
  3. 解壓縮後取用html檔。
  4. 上傳到指定目錄。
  5. 對uploads、cache、templates_c三夾及mainfile.php下chmod 777 檔名 -R。
  6. 設一組資料庫帳號密碼;增一資料庫;設該帳號對該資料庫有完整權限。2.2x須有alter權限,因要增加欄位。
  7. 從瀏覽器執行所在的url。
  8. xoops輸出網頁受php.ini中「default_charset = "xxxx"」管制,所以只要在這設utf-8,而httpd.conf中設「AddDefaultCharset big5」並沒有關係,可以讓其他不使用php的網頁以big5碼正常顯示。

(二)用拷備造xoops:

  1. 複製丁丁製的xoops2.2.4.org,其中絕對路徑與相對路徑均已用變數處理。
  2. 檢查公眾(Apache)能不能寫入templates_c、cache、uploads。因為samba拷備預設公眾沒有寫入權限。
  3. 拷資料庫到新的名稱。
    • 設一資料庫user可管此資料庫。
    • 讓資料庫帳號能管新的資料庫名稱。
  4. 調資料表
    • xoops_banner中三個圖的url。不使用廣告或要改廣告就沒關係。
    • xoops_user中的url。
  5. 改mainfile.php
    • XOOPS_ROOT_PATH
    • XOOPS_URL
    • XOOPS_DB_USER :新user
    • XOOPS_DB_PASS :password
    • XOOPS_DB_NAME :新資料庫名稱
  6. xoops_users表中,建或改網站管理者,pass欄用MD5編碼,level欄設5。

三、安裝後基本可用模組:

xoops版本 2.0.1x 2.2.4
  1. system 系統
  2. mydownloads 檔案下載
  3. newbb 討論區
  4. xoopsfaq 常見問題及解答
  5. xoopspartners 夥伴網站
  6. mylinks 網站連結
  7. sections 精華區
  8. xoopsheadline 友站新聞
  9. contact 連繫我們(寫信給站長)
  10. news 新聞區
  11. xoopspoll 票選
  12. xoopsmembers 會員管理
  1. system 系統
  2. pm 私人訊息 :使用xoops_priv_msgs表
  3. profile 使用者管理:使用xoops_profile_category(站長自定欄位值)

三、對MySQL4.1以上的校調:

(一)xoops關於字集語言的設定

  1. \language\語言名:此目錄名,為各區塊語言包文件夾之統一採用之語言名稱。
  2. \language\schinese\global.php
    define('_CHARSET', 'UTF-8');
    define('_LANGCODE', 'zh-tw');
    define("XOOPS_USE_MULTIBYTES", "1");
  3. \install\language\tchinese\install.php 中 define('_INSTALL_CHARSET','UTF-8');
  4. \install\index.php 中
    $content .= ">".$lang."</option>";
    $content .= ">".(($lang=="tchinese")?"正體中文UTF8":$lang).""</option>";
  5. \upgrade\language\schinese\upgrade.php 中 define('_UPGRADE_CHARSET','UTF-8');
  6. \class\xoopsmailer.php

(二)MySQL4.1以上校調

  1. 正常的校對方式是utf8_general_ci;utf8_unicode_ci雖可在phpMyAdmin中看到中文但會導致 smarty template_c 底下的 cache 檔無法正常產生。其他則在phpMyAdmin中會看到亂碼。
  2. xoops安裝後,各資料庫及資料表校對方式會是latin1_swedish_ci不是 utf8_general_ci。因為這是MySQL預設的校對方式。
  3. 校對方式在以下四層皆可設定:伺服器、資料庫、資料表、欄,越細的設定越優先。
  4. 在/etc/my.cnf設下列三行,則所建資料庫自然設為utf8_general_ci。
    [client]
    default-character-set=utf8
    [mysqld]
    character-set-server = utf8 不要用 default-character-set 設定
    collation-server = utf8_general_ci 或 default-collation=utf8_general_ci(後者較不建議用)
    init_connect='SET NAMES utf8'
  5. 如果不能改my.cnf,則進phpMyAdmin,在諸表格建立前「選某資料庫/管理/校對/utf8_general_ci」,使資料庫預設校對方式為「utf8_general_ci」,以後所建之表皆預設此校對方式。
  6. 如果資料庫的校對方式也不能設定,在\install\sql\mysql.structure.sql中「TYPE=MISAM」換成「TYPE=MyISAM CHARACTER SET utf8 COLLATE utf8_general_ci」。
  7. 將\class\database\mysqldatabase.php 中 下列兩種方法擇一修改,也可以都修改。
    • queryF 方法內 在
      $result = mysql_query($sql, $this->conn); 之上加
      @mysql_query("SET NAMES 'utf8'", $this->conn);
    • connect 方法內 在
      return true; 之上加
      @mysql_query("set names utf8");
  8. 如果 MySQL版本<4.1 上一項不要改。
  9. phpmyadmin 裡, 連線校對選用 utf8_general_ci;
※賤招,不管校對方式,修改phpMyAdmin
  1. 編/phpMyAdmin/libraries/select_lang.lib.php
  2. 改 $mysql_charset_map 陣列的設定,將big5和utf-8的字集對應到latin1(代表圾垃進圾垃出)
    支援Big5:353行「'big5'=>'big5',」→「'big5'=>'latin1',」
    支援UTF-8:370行「'utf-8'=>'utf8',」→「'utf-8'=>'latin1',」
  3. 改 $available_languages 陣列(可用語言選單)的選項,在MySQL4.1以上,欄值已經全部用預設用utf8編碼,所以前端的可用語言選單只出現「xxxx-utf-8」,原選項「zhtw-big5」不可用也不出現。所以我們 改元素索引「'zhtw-big5'」→「'zhtw-big5-utf-8'」,使其冒充為utf-8編碼語言,可出現在選單中,而其選用結果則字集解為big5(zhtw的下一段),而big5被對應到latin1的字集。

(三)utf8_general_ci和utf8_unicode_ci

  1. mysqld 在跟 client 溝通的時候有三個地方要設定編碼: client, connection 跟 result ,
    mysql client 的編碼設定是告訴 mysqld data 會用什麼編碼送過來,
    mysql connection 則是告訴 mysqld data 要用哪種編碼存進 database 裡,
    mysql result 則是告訴 mysqld data 吐出來的時候要吐成哪種編碼。
  2. mysql 在 client, connection, server, result, 間沒有做內部轉換編碼的動作,client 把 UTF-8 用 latin1 connection 送進去應該「不會」掉資料。
    如果 client, result 設定成同一個編碼, connection 設定不一樣時並「不會」掉資料。差別只是存在電腦裡的資料要被怎樣斷句(7 bit or 16bit)解釋而已。
  3. utf8_general_ci 在轉換時速度比較快。來源 codepage 裡面的一個字元只能對應到目標 codepage 裡面的一個字元,如德文裡的ß(2byte)轉換成英文的時候如果是用 utf8_unicode_ci 轉換會變成正確的 ss。
  4. utf8_unicode_ci 在轉換時比較精準。來源 codepage 裡的一個字元對應到目標 codepage 裡的多個字元(反之亦可),如德文裡的ß(2byte)轉換成英文的時候如果是用 utf8_unicode_ci 轉換會變成單byte的 s。
  5. 如果可以的話請盡量用 utf8_unicode_ci 而不要用 utf8_general_ci ,雖然對 multibyte字(如中文)來說這兩個都沒差,但是 utf8 的網頁誰也不知道哪天會不會有這種字元出現在你的網頁上,所以如果設成 utf8_unicode_ci 你就不需要擔心貼上去之後資料在轉換間遺失了。
  6. 但xoops2.2偏偏必須用 utf8_general_ci。Drupal看到的資料也是設utf8_general_ci。

(四)MySQL4.1前後實體資料格式

  1. 將4.1以前的資料庫實體資料檔案搬到4.1以後的資料夾。4.1以前結構資料如中文表名、中文欄名已用utf8編碼,所以結構的中文在4.1以後能正常顯示。
    4.1以前欄值資料是採圾垃進圾垃出的方式,而4.1以後欄值採取utf8編碼,必須使用latin1字集,才能正確顯示中文。
  2. 上項操作下,xoops會完全正常,也不必進行任何修改,因為xoops如果不加 mysql_query("set name 'utf8'"); 也是採圾垃進圾垃出的方式,而且不使用中文表名、欄名。
  3. 所以(二)中討論的賤招,對上項實體資料檔案由4.1之前搬到4.1之後,完全不適用。騙phpMyAdmin用拉丁字集解讀欄值,將使中文表名、欄名解讀失誤。

參、基本操作:

一、設定:

二、安裝模組:

三、使用區塊:

  1. 新增區塊時,本來新增完,樣版應該就會載入資料表,如果沒有,可以更新所屬群組,強迫載入。
  2. 使用者管理模組應開放匿名者模組使用權,人家才能註冊。

四、群組與權限:

  1. 由後台新增使用者時,無使用者管理模組,只要將先使用者加入xoops_users;有使用者管理模組時還要加入xoops_user_profile,否則有功能,不能顯示姓名。
  2. 剛由後台新增使用者時,不屬於任何群組(連訪客都不是),沒有任何權限(連訪客權限都沒有),一定要用介面加入群組。

五、布景:

六、系統功能:

(一)、通知:

  1. 「管理區首頁/模組/使用者管理/欄位/編輯"通知方法"/設定檔中可編輯欄位」決定何群組可編此欄,如已註冊的使用者。
  2. 「管理區首頁/模組/使用者管理/使用者/編輯使用者」選人,再選編輯,再選通知方法:空值為關閉,1為私人訊息,2為email。
  3. http://xoops_url/notifications.php依uid列出該使用者相關的通知,並連結至各模組內的各觸發通知事件。
  4. 有通知功能的模組會前台會列出通知選項,分兩層:類別,類別之下的各種事件。請勾選要觸發通知的事件種類。
  5. 有通知功能的模組在後台的「偏好設定」中,多「啟用通知」和「啟用特定的事件」,前者決定設定通知是在模組內還是區塊內;後者決定有那些觸發通知的事件。

肆、基本資料表:

甲、2.0.1x

一、各資料表筆數說明

  1. xoops_avatar : 0:頭像
  2. xoops_avatar_user_link : 0:
  3. xoops_banner : 3:一個廣告客戶的三個廣告,絕對url。可指向外部。
  4. xoops_bannerclient : 1:一個廣告客戶的名稱、郵址、帳號、密碼
  5. xoops_bannerfinish : 0:
  6. xoops_block_module_link :12:各區塊出現於何頁面,0:出現於所有頁面,-1:出現於最頂端頁面(首頁),模組代碼:出現於某模組中。
  7. xoops_config :71:偏好設定諸設定值。
  8. xoops_configcategory : 6:6個設定類別
    • 一般設定
    • 使用者資訊設定
    • Meta 標記及頁尾註腳
    • 字彙檢核選項
    • 搜尋選項
    • 郵件設定
  9. xoops_configoption :27:設定類型(conf_formtype)為select者,諸選項的值。
  10. xoops_group_permission :55:基本權限。管理員有15項系統管理、1個模組管理、1個模組使用、12個區塊使用權,共29個權限;會員有1個模組使用、12個區塊使用權,共13個權限;公眾初始權限同會員,共13個權限。29+13+13=55。
  11. xoops_groups : 3:管理員、會員、公眾三群組
  12. xoops_groups_users_link : 2:
  13. xoops_image : 0:
  14. xoops_imagebody : 0:
  15. xoops_imagecategory : 0:
  16. xoops_imgset : 1:default圖群
  17. xoops_imgset_tplset_link: 1:default樣版組與default圖群連連看
  18. xoops_imgsetimg : 0:
  19. xoops_modules : 1:系統模組
  20. xoops_newblocks :12:12個區塊
  21. xoops_online : 0:
  22. xoops_priv_msgs : 0:
  23. xoops_ranks : 7:七級會員的id及定義
  24. xoops_session : 1:
  25. xoops_smiles :17:十七個表情符號的id,code和圖
  26. xoops_tplfile :27:default樣版組的27個樣版
  27. xoops_tplset : 1:default樣版組
  28. xoops_tplsource :27:27個樣版組的檔案原始碼抄進欄位中
  29. xoops_users : 1:帳號,絕對url,其中level為0代表未啟用。
  30. xoops_xoopscomments : 0:
  31. xoops_xoopsnotifications: 0:

二、樣版組資料表:

xoops一開始只有一個不可寫入的樣版組(default),所有自製布景均無法生效。須至少複製出一個可寫入的樣版組,供自製布景寫入,default以外的布景才會生效。

基本樣版組共27筆,由xoops_tplfilexoops_tplfile和xoops_tplsource描述,複製一組後變54筆。

(一)資料表欄位說明:

  1. xoops_tplsetxoops_tplset:樣版組
    • tplset_id :代碼,從1編起
    • tplset_name :名稱,如default、marriage
    • tplset_desc :說明
    • tplset_credits:空白
    • tplset_created:建立時間
  2. xoops_tplfile:各樣版檔所在
    • tpl_id :代碼
    • tpl_refid :次編號,模組用為模組編號;區塊用為區塊編號。
    • tpl_module :隸屬模組
    • tpl_tplset :隸屬樣版組
    • tpl_file :樣版檔名
    • tpl_desc :樣版說明
    • tpl_lastmodified:最後修改時間
    • tpl_lastimported:最後載入時間
    • tpl_type :模組或區塊
  3. xoops_tplsource:筆數和xoops_tplfilexoops_tplfile相同
    • tpl_id :代碼
    • tpl_source:帶smarty的html碼。抄自樣版檔。

(二)15個基本樣版,簡介如下:

  1. system_imagemanager.html; 供imagemanager.php
  2. system_imagemanager2.html; 供imagemanager.php
  3. system_userinfo.html; 供userinfo.php(觀看帳號)
  4. system_userform.html; 供user.php (登入)
  5. system_rss.html; 供backend.php
  6. system_redirect.html; 供include/functions.php用,重導向時的兩頁之間的說明
  7. system_comment.html; 讓三種評論格式含入的子樣版
  8. system_comments_flat.html; 讓樣版含入的「平板評論樣版」
  9. system_comments_thread.html; 讓樣版含入的「樹(線)狀評論樣版」
  10. system_comments_nest.html; 讓樣版含入的「巢板評論樣版」
  11. system_siteclosed.html; 供include/common.php用的關站說明
  12. system_dummy.html; 只含一個smarty變數 <{$dummy_content}> 。虛擬樣版檔,為了撐住無樣版內容,不可以加以編輯。
  13. system_notification_list.html; 供notifications.php(使用中的通知)
  14. system_notification_select.html;供其他樣版加入通知功能含入的「通知功能樣版」。
  15. system_block_dummy.html; 只含一個smarty變數 <{$block.content}> 。虛擬樣版,為了自行定義的區塊或沒有樣版的區塊。

(三)12個系統模組區塊使用樣版,其區塊函式定義在/modules/system/blocks/system_blocks.php:

  1. 使用者選單 (ID: 1)
  2. 登入 (ID: 2)
  3. 搜尋 (ID: 3)
  4. 待審內容 (ID: 4)
  5. 主選單 (ID: 5)
  6. 站台資訊 (ID: 6)
  7. 誰在線上 (ID: 7)
  8. 張貼者排行 (ID: 8)
  9. 新會員 (ID: 9)
  10. 最新評論 (ID: 10)
  11. 通知選項 (ID: 11)
  12. 版面風格 (ID: 12)

乙、2.2.4版

一、資料表基本筆數說明:

  1. xoops_avatar : 0:頭像
  2. xoops_avatar_user_link : 0:頭像和帳號連結
  3. xoops_banner : 3:一個廣告客戶的三個廣告,絕對url。可指向外部。
  4. xoops_bannerclient : 1:一個廣告客戶的名稱、郵址、帳號、密碼
  5. xoops_bannerfinish : 0:廣告起迄
  6. xoops_block_instance : 3:啟用區塊(參數)(2.2新增)見五
  7. xoops_block_module_link : 3:各區塊出現於何頁面。見區塊資料表。
  8. xoops_config :65:偏好設定諸設定值。
  9. xoops_configcategory : 6:各模組的各設定類別
    • 代碼1:一般設定,系統模組與使用者管理模組皆有
    • 代碼2:使用者資訊設定,系統模組無,使用者管理模組才有
    • 代碼3:Meta 標記及頁尾註腳,系統模組
    • 代碼4:字彙檢核選項,系統模組
    • 代碼5:搜尋選項,系統模組
    • 代碼6:郵件設定,系統模組
    • 代碼7:帳號授權選項,系統模組
    • 代碼0:其他設定選項,其他模組
  10. xoops_configoption :24:設定類型(conf_formtype)為select者,諸選項的值。
  11. xoops_group_permission :32:基本權限。管理員有15項系統管理;三群組對三區塊皆有使用權共9個權限;管理員對系統模組有1個模組管理權、三群組對系統模1個模組皆有使用權,共4個權限,但此4個權限被重覆兩次變成8個權限。15+9+(4*2)=32。
  12. xoops_groups : 3:管理員、會員、公眾三群組
  13. xoops_groups_users_link : 2:站長屬於管理員、站長屬於會員。
  14. xoops_image : 0:圖片描述
  15. xoops_imagebody : 0:圖片存成欄值
  16. xoops_imagecategory : 0:
  17. xoops_imgset : 1:default圖群
  18. xoops_imgset_tplset_link: 1:default樣版組與default圖群連連看
  19. xoops_imgsetimg : 0:
  20. xoops_modules : 1:系統模組
  21. xoops_newblocks :13:13個區塊
  22. xoops_online : 0:
  23. xoops_ranks : 7:七級會員的id及定義
  24. xoops_session : 1:
  25. xoops_smiles :17:十七個表情符號的id,code和圖
  26. xoops_tplfile :30:default樣版組的30個樣版,17個模組用,13個區塊用
  27. xoops_tplset : 1:default樣版組
  28. xoops_tplsource :30:27個樣版組的檔案原始碼抄進欄位中
  29. xoops_user_profile : 1:有幾個使用者個人資料(2.2新增)
  30. xoops_user_profile_field:12:每個使用者個人資料有那幾欄(2.2新增),預設12欄。
  31. xoops_users : 1:帳號,絕對url,其中level為0代表未啟用。
  32. xoops_xoopscomments : 0:評論
  33. xoops_xoopsnotifications: 0:通知
※xoops_priv_msgs表 : 0:改列入「私人訊息」(pm)

二、資料表相依說明:

  1. 樣版相依:涉四個表
    • xoops_tplfile.tpl_id <=> xoops_tplsource.tpl_id 樣版流水號
    • xoops_tplfile.tpl_refid <=> xoops_modules.mid 模組類樣版次編碼 同 模組編碼
    • xoops_tplfile.tpl_refid <=> xoops_newblocks.bid 區塊類樣版次編碼 同 區塊編碼
    • xoops_tplfile.tpl_module <=> xoops_modules.dirname 隸屬模組
    • xoops_tplfile.tpl_file <=> 各模組 xoops_version.php 設 $modversion['templates'][幾]['file'] 和 $modversion['blocks'][幾]['template']
  2. 使用者/群組相依,涉七個表
    • xoops_groups.groupid <=> xoops_groups_users_link.groupid,uid,linkid <=> xoops_users.uid
    • xoops_group_permission.gperm_groupid <=> xoops_groups.groupid
    • xoops_xoopscomments.com_uid <=> xoops_users.uid
    • xoops_xoopsnotifications.not_uid <=> xoops_users.uid
    • xoops_online.online_uid <=> xoops_users.uid
  3. 模組相依,涉九個表
    • xoops_modules.mid
    • xoops_newblocks.mid 區塊隸屬於何模組
    • xoops_block_module_link.module_id 區塊顯示於何處
    • xoops_tplfile.tpl_refid 模組類樣版次編碼 同 模組編碼
    • xoops_group_permission.gperm_modid 細部權限
    • xoops_group_permission.gperm_itemid 模組管理權及模組使用權
    • xoops_config.conf_modid
    • xoops_configcategory.confcat_modid
    • xoops_xoopscomments.com_modid
    • xoops_xoopsnotifications.not_modid
  4. 區塊相依,涉五個表
    • xoops_block_instance.instanceid
    • xoops_block_instance.instanceid <=> xoops_block_module_link.block_id 區塊顯示於何處
    • xoops_block_instance.instanceid <=> xoops_group_permission.gperm_itemid 區塊使用權
    • xoops_block_instance.bid <=> xoops_newblocks.bid 區塊基本資料
    • xoops_tplfile.tpl_refid <=> xoops_newblocks.bid 區塊類樣版次編碼 同 區塊編碼

三、樣版組資料表:

xoops一開始只有一個的樣版組(default)。

基本樣版組共30筆,由xoops_tplfilexoops_tplfile和xoops_tplsource描述,複製一組後變60筆。

(一)資料表欄位說明:

  1. xoops_tplsetxoops_tplset:樣版組
    • tplset_id :代碼,從1編起
    • tplset_name :名稱,如default、marriage
    • tplset_desc :說明
    • tplset_credits:空白
    • tplset_created:建立時間
  2. xoops_tplfile:各樣版檔所在
    • tpl_id :代碼
    • tpl_refid :次編號,模組用為模組編號;區塊用為區塊編號。
    • tpl_module :隸屬模組
    • tpl_tplset :隸屬樣版組
    • tpl_file :樣版檔名
    • tpl_desc :樣版說明
    • tpl_lastmodified:最後修改時間
    • tpl_lastimported:最後載入時間
    • tpl_type :模組用或區塊用
  3. xoops_tplsource:筆數和xoops_tplfilexoops_tplfile相同
    • tpl_id :代碼
    • tpl_source:帶smarty的html碼。抄自樣版檔。

(二)18-1個系統模組用樣版,簡介如下:

  1. system_imagemanager.html; 供imagemanager.php
  2. system_imagemanager2.html; 供imagemanager.php
  3. system_userinfo.html; 供userinfo.php(觀看帳號)
  4. system_userform.html; 供user.php (登入)
  5. system_rss.html; 供backend.php
  6. system_redirect.html; 供include/functions.php用,重導向時的兩頁之間的說明
  7. system_comment.html; 讓三種評論格式含入的子樣版
  8. system_comments_flat.html; 讓樣版含入的「平板評論樣版」
  9. system_comments_thread.html; 讓樣版含入的「樹(線)狀評論樣版」
  10. system_comments_nest.html; 讓樣版含入的「巢板評論樣版」
  11. system_siteclosed.html; 供include/common.php用的關站說明
  12. system_dummy.html; 只含一個smarty變數 <{$dummy_content}> 。虛擬樣版檔,為了撐住無樣版內容,不可以加以編輯。
  13. system_notification_list.html; 供notifications.php(使用中的通知)
  14. system_notification_select.html;供其他樣版加入通知功能含入的「通知功能樣版」。
  15. system_block_dummy.html; 只含一個smarty變數 <{$block.content}> 。虛擬樣版,為了自行定義的區塊或沒有樣版的區塊。2.2中移至區塊樣版。
  16. system_error.html; 供error.php(錯誤訊息),2.2版新增,之前無error.php程式。
  17. system_plain.html; 精簡版外觀,無logo、無banner、無諸blocks,2.2版新增。供class/theme.php使用,當output_type為plain時,使用此樣版。
  18. system_admin_block.html; 區塊管理的樣版。供modules\system\admin\blocksadmin\blocksadmin.php使用。

(三)13個系統模組區塊使用樣版,其區塊函式定義在/modules/system/blocks/system_blocks.php:

  1. 使用者選單 (ID: 1)
  2. 登入 (ID: 2)
  3. 搜尋 (ID: 3)
  4. 待審內容 (ID: 4)
  5. 主選單 (ID: 5)
  6. 本站資訊 (ID: 6)
  7. 誰在線上 (ID: 7)
  8. 張貼者排行 (ID: 8)
  9. 新會員 (ID: 9)
  10. 最新評論 (ID: 10)
  11. 通知選項 (ID: 11)
  12. 版面風格 (ID: 12)
  13. 虛擬樣版 (ID: 13):system_block_dummy.html;只含一個smarty變數 <{$block.content}>,為了自行定義的區塊或沒有樣版的區塊。2.0中在系統模組樣版中,2.2移至系統區塊樣版。

四、群組及權限資料表xoops_group_permission:不能隨便改本表,xoops是依index來抓本表內容,顯出各區塊,index和各筆對不上時,各區塊都出不來。

欄位說明

五、區塊資料表:

(○)、基本說明:

  1. 本質上是一筆資料或一組函式(最多兩個,編輯及顯示)。
  2. 構成畫面的顯示單位,可以有自己的外觀設計。

(一)xoops_block_module_link:區塊與模組關係

  1. block_id :區塊的啟用編碼
  2. module_id:0代表系統層級設定,其pageid值0,1,2代表出現在所有頁面,首頁(最上層頁面),管理頁面。其他值代表模組編號,說明其下一點。
  3. pageid:0代表出現於模組的所有頁面,值1,2,3…代表模組設定檔中 $modversion['pages'][幾] ,即該模組中可顯示區塊的位置。

(二)xoops_group_permission:區塊群組權限。見基本資料表。

(三)xoops_newblocks:區塊資料,見基本資料表。

六、2.2 改變:

(一)外觀:

  1. 2.2之前沒有精簡外觀,管理介面也不能使用布景。
  2. 2.2之後,不用新增「樣板組」將其他樣板載入第二個樣粄組,即可將其他樣板套用於defalt樣版組。
  3. class資料夾下新增theme.php管外觀變化。
  4. 其中函式display,看pageType是不是admin,是就取admin.php配themeadmin.html;不是就取main.php配theme.html。
  5. 其中函式display,如output_type設為plain,則採用精簡外觀,使用新增system_plain.html;不是再看pagetype是不是設為admin,如是取用themeadmin.html;皆不是取用defaultFile(theme.html)。
  6. 其中函式loadTheme(),先看有沒有選theme,再看pagetype是不是admin,如果是就去找theme_set_admin,再去找該布景目錄下的themeadmin.html。

(二)xoops_newblocks:

新版拆分為兩個檔xoops_newblocks放所有區塊,xoops_block_instance放要用的區塊。
原來共20欄
  1. bid :區塊編號
  2. mid :隸屬模組編號,1代表系統。-1代表無主。
  3. func_num :在模組之下的次編號
  4. options :運作參數;顯示秀圖;秀圖寬度;
  5. name :區塊中文名稱(xoops命名)
  6. title :區塊中文抬頭(使用者命名),預設值同name
  7. content :區塊原始碼,text型,最大65535位元組。
  8. side :位置,0-4代表左、中、右
  9. weight :順位
  10. visible :是否顯示。
  11. block_type :S或M。S,由函式套Smarty產生內容;函式所在處由以下各欄決定,使用者不能編內容。
  12. c_type :內容類型,H,HTML;S,php Script;S,自動格式(啟用臉譜);T,自動格式(關閉臉譜)
  13. isactive :可否區塊管理
  14. dirname :函式檔所在之資料夾,以xoops網頁根目錄的相對路徑。
  15. func_file :函式所在程式檔名。
  16. show_func :顯出函式。
  17. edit_func :編輯函式。
  18. template :區塊樣版檔名稱
  19. bcachetime :區塊快取週期,有效快取時間。
  20. last_modified:最後修改時間
新版xoops_newblocks
  1. bid :區塊編號
  2. mid :隸屬模組編號,1代表系統。-1代表無主。
  3. options :運作參數;顯示秀圖;秀圖寬度;
  4. name :區塊中文名稱(xoops命名)
  5. c_type :內容類型,H,HTML;S,php Script;S,自動格式(啟用臉譜);T,自動格式(關閉臉譜)
  6. isactive :可否區塊管理
  7. dirname :函式檔所在之資料夾,以xoops網頁根目錄的相對路徑。
  8. func_file :函式所在程式檔名。
  9. show_func :顯出函式。
  10. edit_func :編輯函式。
  11. template :區塊樣版檔名稱
  12. last_modified:最後修改時間
新版xoops_block_instance
  1. instanceid :顯示區塊編號
  2. bid :區塊編號
  3. options :運作參數;顯示秀圖;秀圖寬度;
  4. title :區塊中文抬頭(使用者命名),預設值同name
  5. side :位置,0-4代表左、中、右
  6. weight :順位
  7. visible :是否顯示。
  8. bcachetime :區塊快取週期,有效快取時間。
取消
  1. func_num :在模組之下的次編號
  2. content :區塊原始碼,text型,最大65535位元組。
  3. block_type :S或M。S,由函式套Smarty產生內容;函式所在處由以下各欄決定,使用者不能編內容。

(三)使用者xoops_user_profile可變動欄位

  1. xoops_user_profile 每位註冊者的個人資料
  2. xoops_user_profile_fieldcontent 上表各欄之說明
  3. xoops_profile_fieldcategory 站長自訂欄位與自訂類別的關係資料表
  4. xoops_profile_category 站長自訂之欄位類別
預設之xoops_user_profile欄位
  1. umode 評論顯示模式
  2. uorder 評論排序方式
  3. notify_method 通知方法
  4. notify_mode 預設通知模式
  5. user_regdate 註冊日期
  6. posts 張貼數
  7. attachsig 附上簽名檔
  8. timezone_offset 時區
  9. user_mailok 是否要接收通知信
  10. theme 版面風格
  11. actkey 使用者啟動碼
  12. last_login 最後登入時間
pm所加之xoops_user_profile欄位
  1. pm_link 私人訊息連結,顯示發送給使用者私人訊息的連結。自動填入「<a href="javascript:openWithSelfMain('{X_URL}/modules/pm/pmlite.php?send2=1&to_userid={X_UID}', 'pmlite', 550, 450);" title="發信給 {X_UNAME}"><img src="{X_URL}/modules/pm/images/pm.gif" alt="發信給 {X_UNAME}" /></a>」
profile所加之xoops_user_profile欄位
  1. user_aim AIM
  2. user_icq ICQ
  3. user_from 居住地
  4. user_sig 簽名
  5. user_viewemail 使用者可以看到我的電子郵件位址
  6. user_yim YIM
  7. user_msnm MSN
  8. bio 額外的資訊
  9. user_intrest 興趣
  10. user_occ 職業
  11. url 個人網站
  12. newemail 新的電子郵件
  13. xxxx 其他站長自訂欄位
(四)錯誤

  1. 模組更新或拆除時會誤刪別的樣版,所以要常備份xoops_tplfile和xoops_tplsource。
  2. pm模組指定pm_lookup.html樣板,卻沒有此html檔,使xoops_tplfile比xoops_tplsource每樣板組都多出一筆。
  3. xoops_group_permission中管理員對系統模組有1個模組管理權、三群組對系統模1個模組皆有使用權,共4個權限,但此4個權限被重覆兩次變成8個權限。此重覆在更新權限設定時,會自然修正,不必刻意處理。

丙、2.4及2.5版

一、資料表(共32張)基本筆數說明:

  1. xoops_avatar : 0:頭像
  2. xoops_avatar_user_link : 0:頭像和帳號連結
  3. xoops_banner : 3:一個廣告客戶的三個廣告,絕對url。可指向外部。
  4. xoops_bannerclient : 1:一個廣告客戶的名稱、郵址、帳號、密碼
  5. xoops_bannerfinish : 0:廣告起迄
  6. xoops_block_module_link :12:各區塊出現於何頁面。見區塊資料表。
  7. xoops_cache_model : 0:
  8. xoops_config :130:偏好設定諸設定值。2.4版約161項設定值。
  9. xoops_configcategory : 7:各模組的各設定類別
    • 代碼1:一般設定,系統模組與使用者管理模組皆有
    • 代碼2:使用者資訊設定,系統模組無,使用者管理模組才有
    • 代碼3:Meta 標記及頁尾註腳,系統模組
    • 代碼4:字彙檢核選項,系統模組
    • 代碼5:搜尋選項,系統模組
    • 代碼6:郵件設定,系統模組
    • 代碼7:帳號授權選項,系統模組
    • 代碼0:其他設定選項,其他模組
  10. xoops_configoption :47:設定類型(conf_formtype)為select者,諸選項的值。2.4版約99個選項值。
  11. xoops_groups : 3:管理員、會員、公眾三群組
  12. xoops_groups_users_link : 2:站長屬於管理員、站長屬於會員。
  13. xoops_group_permission :57:基本權限。管理員有17項系統管理權限(system_admin);三群組對12區塊皆有使用權共36個block_read權限;管理員對系統模組有1個模組管理權(module_admin)、三群組對系統模皆有使用權共3個module_read權限,但此4個權限被重覆兩次變成8個權限。17+36+1+3=57。
  14. xoops_image : 0:圖片描述
  15. xoops_imagebody : 0:圖片存成欄值
  16. xoops_imagecategory : 0:
  17. xoops_imgset : 1:default圖群
  18. xoops_imgsetimg : 0:
  19. xoops_imgset_tplset_link: 1:default樣版組與default圖群連連看
  20. xoops_modules : 1:系統模組
  21. xoops_newblocks :12:12個區塊
  22. xoops_online : 0:上線者
  23. xoops_priv_msgs : 0:本表在2.2版時改列入「私人訊息」(pm)模組,2.4、2.5又改回系統模組
  24. xoops_ranks : 7:七級會員的id及定義
  25. xoops_session : 1:
  26. xoops_smiles :17:十七個表情符號的id,code和圖
  27. xoops_tplfile :50:default樣版組的50個樣版,38個模組用,12個區塊用
  28. xoops_tplset : 1:default樣版組
  29. xoops_tplsource :50:50個樣版組的檔案原始碼抄進欄位中
  30. xoops_users : 1:帳號,絕對url,其中level為0代表未啟用。
  31. xoops_xoopscomments : 0:評論
  32. xoops_xoopsnotifications: 0:通知

二、資料表相依說明:

  1. 樣版相依:涉四個表
    • xoops_tplfile.tpl_id <=> xoops_tplsource.tpl_id 樣版流水號
    • xoops_tplfile.tpl_refid <=> xoops_modules.mid 模組類樣版次編碼 同 模組編碼
    • xoops_tplfile.tpl_refid <=> xoops_newblocks.bid 區塊類樣版次編碼 同 區塊編碼
    • xoops_tplfile.tpl_module <=> xoops_modules.dirname 隸屬模組
    • xoops_tplfile.tpl_file <=> 各模組 xoops_version.php 設 $modversion['templates'][幾]['file'] 和 $modversion['blocks'][幾]['template']
  2. 使用者/群組相依,涉七個表
    • xoops_groups.groupid <=> xoops_groups_users_link.groupid,uid,linkid <=> xoops_users.uid
    • xoops_group_permission.gperm_groupid <=> xoops_groups.groupid
    • xoops_xoopscomments.com_uid <=> xoops_users.uid
    • xoops_xoopsnotifications.not_uid <=> xoops_users.uid
    • xoops_online.online_uid <=> xoops_users.uid
  3. 模組相依,涉九個表
    • xoops_modules.mid
    • xoops_newblocks.mid 區塊隸屬於何模組
    • xoops_block_module_link.module_id 區塊顯示於何處
    • xoops_tplfile.tpl_refid 模組類樣版次編碼 同 模組編碼
    • xoops_group_permission.gperm_modid 細部權限
    • xoops_group_permission.gperm_itemid 模組管理權及模組使用權
    • xoops_config.conf_modid
    • xoops_configcategory.confcat_modid
    • xoops_xoopscomments.com_modid
    • xoops_xoopsnotifications.not_modid
  4. 區塊相依,涉五個表
    • xoops_block_instance.instanceid
    • xoops_block_instance.instanceid <=> xoops_block_module_link.block_id 區塊顯示於何處
    • xoops_block_instance.instanceid <=> xoops_group_permission.gperm_itemid 區塊使用權
    • xoops_block_instance.bid <=> xoops_newblocks.bid 區塊基本資料
    • xoops_tplfile.tpl_refid <=> xoops_newblocks.bid 區塊類樣版次編碼 同 區塊編碼

三、樣版組資料表:

xoops一開始只有一個的樣版組(default)。

基本樣版組共30筆,由xoops_tplfilexoops_tplfile和xoops_tplsource描述,複製一組後變60筆。

(一)資料表欄位說明:

  1. xoops_tplsetxoops_tplset:樣版組
    • tplset_id :代碼,從1編起
    • tplset_name :名稱,如default、marriage
    • tplset_desc :說明
    • tplset_credits:空白
    • tplset_created:建立時間
  2. xoops_tplfile:各樣版檔所在
    • tpl_id :代碼
    • tpl_refid :次編號,模組用為模組編號;區塊用為區塊編號。
    • tpl_module :隸屬模組
    • tpl_tplset :隸屬樣版組
    • tpl_file :樣版檔名
    • tpl_desc :樣版說明
    • tpl_lastmodified:最後修改時間
    • tpl_lastimported:最後載入時間
    • tpl_type :模組用或區塊用
  3. xoops_tplsource:筆數和xoops_tplfilexoops_tplfile相同
    • tpl_id :代碼
    • tpl_source:帶smarty的html碼。抄自樣版檔。

(二)18-1個系統模組用樣版,簡介如下:

  1. system_imagemanager.html; 供imagemanager.php
  2. system_imagemanager2.html; 供imagemanager.php
  3. system_userinfo.html; 供userinfo.php(觀看帳號)
  4. system_userform.html; 供user.php (登入)
  5. system_rss.html; 供backend.php
  6. system_redirect.html; 供include/functions.php用,重導向時的兩頁之間的說明
  7. system_comment.html; 讓三種評論格式含入的子樣版
  8. system_comments_flat.html; 讓樣版含入的「平板評論樣版」
  9. system_comments_thread.html; 讓樣版含入的「樹(線)狀評論樣版」
  10. system_comments_nest.html; 讓樣版含入的「巢板評論樣版」
  11. system_siteclosed.html; 供include/common.php用的關站說明
  12. system_dummy.html; 只含一個smarty變數 <{$dummy_content}> 。虛擬樣版檔,為了撐住無樣版內容,不可以加以編輯。
  13. system_notification_list.html; 供notifications.php(使用中的通知)
  14. system_notification_select.html;供其他樣版加入通知功能含入的「通知功能樣版」。
  15. system_block_dummy.html; 只含一個smarty變數 <{$block.content}> 。虛擬樣版,為了自行定義的區塊或沒有樣版的區塊。2.2中移至區塊樣版。
  16. system_error.html; 供error.php(錯誤訊息),2.2版新增,之前無error.php程式。
  17. system_plain.html; 精簡版外觀,無logo、無banner、無諸blocks,2.2版新增。供class/theme.php使用,當output_type為plain時,使用此樣版。
  18. system_admin_block.html; 區塊管理的樣版。供modules\system\admin\blocksadmin\blocksadmin.php使用。

(三)13個系統模組區塊使用樣版,其區塊函式定義在/modules/system/blocks/system_blocks.php:

  1. 使用者選單 (ID: 1)
  2. 登入 (ID: 2)
  3. 搜尋 (ID: 3)
  4. 待審內容 (ID: 4)
  5. 主選單 (ID: 5)
  6. 本站資訊 (ID: 6)
  7. 誰在線上 (ID: 7)
  8. 張貼者排行 (ID: 8)
  9. 新會員 (ID: 9)
  10. 最新評論 (ID: 10)
  11. 通知選項 (ID: 11)
  12. 版面風格 (ID: 12)
  13. 虛擬樣版 (ID: 13):system_block_dummy.html;只含一個smarty變數 <{$block.content}>,為了自行定義的區塊或沒有樣版的區塊。2.0中在系統模組樣版中,2.2移至系統區塊樣版。

四、群組及權限資料表xoops_group_permission:不能隨便改本表,xoops是依index來抓本表內容,顯出各區塊,index和各筆對不上時,各區塊都出不來。

欄位說明

五、區塊資料表:

(○)、基本說明:

  1. 本質上是一筆資料或一組函式(最多兩個,編輯及顯示)。
  2. 構成畫面的顯示單位,可以有自己的外觀設計。

(一)xoops_block_module_link:區塊與模組關係

  1. block_id :區塊的啟用編碼
  2. module_id:0代表系統層級設定,其pageid值0,1,2代表出現在所有頁面,首頁(最上層頁面),管理頁面。其他值代表模組編號,說明其下一點。
  3. pageid:0代表出現於模組的所有頁面,值1,2,3…代表模組設定檔中 $modversion['pages'][幾] ,即該模組中可顯示區塊的位置。

(二)xoops_group_permission:區塊群組權限。見基本資料表。

(三)xoops_newblocks:區塊資料,見基本資料表。

六、2.2 改變:

(一)外觀:

  1. 2.2之前沒有精簡外觀,管理介面也不能使用布景。
  2. 2.2之後,不用新增「樣板組」將其他樣板載入第二個樣粄組,即可將其他樣板套用於defalt樣版組。
  3. class資料夾下新增theme.php管外觀變化。
  4. 其中函式display,看pageType是不是admin,是就取admin.php配themeadmin.html;不是就取main.php配theme.html。
  5. 其中函式display,如output_type設為plain,則採用精簡外觀,使用新增system_plain.html;不是再看pagetype是不是設為admin,如是取用themeadmin.html;皆不是取用defaultFile(theme.html)。
  6. 其中函式loadTheme(),先看有沒有選theme,再看pagetype是不是admin,如果是就去找theme_set_admin,再去找該布景目錄下的themeadmin.html。

(二)xoops_newblocks:

新版拆分為兩個檔xoops_newblocks放所有區塊,xoops_block_instance放要用的區塊。
原來共20欄
  1. bid :區塊編號
  2. mid :隸屬模組編號,1代表系統。-1代表無主。
  3. func_num :在模組之下的次編號
  4. options :運作參數;顯示秀圖;秀圖寬度;
  5. name :區塊中文名稱(xoops命名)
  6. title :區塊中文抬頭(使用者命名),預設值同name
  7. content :區塊原始碼,text型,最大65535位元組。
  8. side :位置,0-4代表左、中、右
  9. weight :順位
  10. visible :是否顯示。
  11. block_type :S或M。S,由函式套Smarty產生內容;函式所在處由以下各欄決定,使用者不能編內容。
  12. c_type :內容類型,H,HTML;S,php Script;S,自動格式(啟用臉譜);T,自動格式(關閉臉譜)
  13. isactive :可否區塊管理
  14. dirname :函式檔所在之資料夾,以xoops網頁根目錄的相對路徑。
  15. func_file :函式所在程式檔名。
  16. show_func :顯出函式。
  17. edit_func :編輯函式。
  18. template :區塊樣版檔名稱
  19. bcachetime :區塊快取週期,有效快取時間。
  20. last_modified:最後修改時間
新版xoops_newblocks
  1. bid :區塊編號
  2. mid :隸屬模組編號,1代表系統。-1代表無主。
  3. options :運作參數;顯示秀圖;秀圖寬度;
  4. name :區塊中文名稱(xoops命名)
  5. c_type :內容類型,H,HTML;S,php Script;S,自動格式(啟用臉譜);T,自動格式(關閉臉譜)
  6. isactive :可否區塊管理
  7. dirname :函式檔所在之資料夾,以xoops網頁根目錄的相對路徑。
  8. func_file :函式所在程式檔名。
  9. show_func :顯出函式。
  10. edit_func :編輯函式。
  11. template :區塊樣版檔名稱
  12. last_modified:最後修改時間
新版xoops_block_instance
  1. instanceid :顯示區塊編號
  2. bid :區塊編號
  3. options :運作參數;顯示秀圖;秀圖寬度;
  4. title :區塊中文抬頭(使用者命名),預設值同name
  5. side :位置,0-4代表左、中、右
  6. weight :順位
  7. visible :是否顯示。
  8. bcachetime :區塊快取週期,有效快取時間。
取消
  1. func_num :在模組之下的次編號
  2. content :區塊原始碼,text型,最大65535位元組。
  3. block_type :S或M。S,由函式套Smarty產生內容;函式所在處由以下各欄決定,使用者不能編內容。

(三)使用者xoops_user_profile可變動欄位

  1. xoops_user_profile 每位註冊者的個人資料
  2. xoops_user_profile_fieldcontent 上表各欄之說明
  3. xoops_profile_fieldcategory 站長自訂欄位與自訂類別的關係資料表
  4. xoops_profile_category 站長自訂之欄位類別
預設之xoops_user_profile欄位
  1. umode 評論顯示模式
  2. uorder 評論排序方式
  3. notify_method 通知方法
  4. notify_mode 預設通知模式
  5. user_regdate 註冊日期
  6. posts 張貼數
  7. attachsig 附上簽名檔
  8. timezone_offset 時區
  9. user_mailok 是否要接收通知信
  10. theme 版面風格
  11. actkey 使用者啟動碼
  12. last_login 最後登入時間
pm所加之xoops_user_profile欄位
  1. pm_link 私人訊息連結,顯示發送給使用者私人訊息的連結。自動填入「<a href="javascript:openWithSelfMain('{X_URL}/modules/pm/pmlite.php?send2=1&to_userid={X_UID}', 'pmlite', 550, 450);" title="發信給 {X_UNAME}"><img src="{X_URL}/modules/pm/images/pm.gif" alt="發信給 {X_UNAME}" /></a>」
profile所加之xoops_user_profile欄位
  1. user_aim AIM
  2. user_icq ICQ
  3. user_from 居住地
  4. user_sig 簽名
  5. user_viewemail 使用者可以看到我的電子郵件位址
  6. user_yim YIM
  7. user_msnm MSN
  8. bio 額外的資訊
  9. user_intrest 興趣
  10. user_occ 職業
  11. url 個人網站
  12. newemail 新的電子郵件
  13. xxxx 其他站長自訂欄位
(四)錯誤

  1. 模組更新或拆除時會誤刪別的樣版,所以要常備份xoops_tplfile和xoops_tplsource。
  2. pm模組指定pm_lookup.html樣板,卻沒有此html檔,使xoops_tplfile比xoops_tplsource每樣板組都多出一筆。
  3. xoops_group_permission中管理員對系統模組有1個模組管理權、三群組對系統模1個模組皆有使用權,共4個權限,但此4個權限被重覆兩次變成8個權限。此重覆在更新權限設定時,會自然修正,不必刻意處理。

伍、外觀(布景)

一、基本說明:

  1. ┌────────────┐  ┌──────────┐
    │include "mainfile.php"; │  │套上選用的theme.html│
    │include "header.php";   │  │套上選用的style.css │
    │  ┌──────────┤  │  ┌────────┤
    │  │自設的php碼或html碼 │=>│  │ 產生「內容區」 │
    │  └──────────┤※│  └────────┤
    │include "footer.php";   │  │                    │
    └────────────┘  └──────────┘
              xxx.php                     http輸出
    • 按帳號決定群組。
    • 模組各支程式從內容區輸出。所以一次只能執行一模組中的一程式。
    • 按群組、現行模組、區塊是否顯示設定,選出可用區塊。
    • 產生區塊並套區塊樣版。
    • 將區塊分五組塞入五個區塊放置區。組內區塊按順位排序。五組區塊群和五個區塊放置區可任意配對。
    • 按theme.html擺放頂區、主區(五個區塊放置區)、尾區,並按style.css修飾各區外觀。
  2. 在themes下,一個子目錄一個布景。可以有多個布景,但一次只能有一個布景起作用。。
  3. 子目錄中的theme.html+style.css控制所有區塊放置區的頁面。左、右、中左、中右、中中五區塊放置區即使各有設定,也是整合進theme.html中。
  4. 布景檔由「樣版」和圖組成,由Smarty template engine解成/templates_c/default^theme.html。
  5. 修改布景期間請將「系統/偏好/一般設定」中將「要由版面風格/您的版面風格/樣版目錄中來更新模組樣版.html檔嗎?」設為是,以停用快取。快取其實感覺不出來。

二、簡易改畫面:

  1. 左上/themes/default/logo.gif,換成我們的圖。改theme.html,找到logo.gif換成我們的圖。
  2. xoops_banner資料表中,imageurl換成我們的圖。
  3. 常見連結:
    • register.php 註冊
    • user.php 登入
    • user.php?op=logout 登出
    • lostpass.php 處理忘記您的密碼
    • userinfo.php?uid=xx觀看帳號
    • edituser.php 編輯帳號
    • notifications.php 通知
    • readpmsg.php 逐封讀取私人訊息
    • viewpmsg.php 收件匣,表列私人訊息
    • admin.php 管理員選單,不使用theme.html
    • search.php 站內蒐尋
    • modules/system/admin.php?fct=14個管理功能:不使用theme.html
    • pmlite.php? 寄發「私人訊息」
      1. send=1:寄「私人訊息」。
      2. send2=1&to_userid=某人:發「私人訊息」給某人。
      3. reply=1&msg_id=某私人訊息:針對某私人訊息回信,自動帶入「給:」、「Re:主旨」、前私人訊息之「訊息內容:」。
    • 不明
      1. banners.php 不明,只知與廣告管理有關
      2. misc.php
      3. pda.php
      4. image.php

三、翻譯:

  1. 中日:http://www.excite.co.jp/world/chinese/
  2. 中英:http://www.systranbox.com/systran/box/

四、修改theme.html:

(一)結構與內容:

  1. head
    • 字集、語言、機器人、關鍵字、描寫。
    • 作者、版權。
    • rating、generator
    • 抬頭
    • favicon.ico
    • 兩個css:xoops.css、布景下style.css
    • xoops.js
  2. default
    ┌─────┬──────┐
    │headerlogo│headerbanner├┐
    ├─────┴──────┤tr:header
    │headerbar               ├┘
    └────────────┘
    ┌─┬────────┬─┐
    │  │中(有才秀) if   │  │
    │  │ ┌─────┐ │  │
    │左│ │   中中   │ │右│
    │  │ ├──┬──┤ │  │
    │  │ │中左│中右│ │  │
    │  │ └──┴──┘ │  │
    │  │ 內容區(div)/if │  │
    └─┴────────┴─┘
    ┌────────────┐
    │                        │tr:footerbar
    └────────────┘
  3. 頂區(header)
    • headerlogo:/themes/default/logo.gif
    • headerbanner:xoops_banner資料表中的imageurl
    • headerbar:空白
  4. 主區
    • 左區(leftcolumn):所有$xoops_lblocks並套用theme_blockleft.html
    • 中區(centercolumn):$xoops_showcblock == 1才秀
    • 中中區(centerCcolumn):所有$xoops_ccblocks並套用theme_blockcenter_c.html
    • 中左區(centerLcolumn):所有$xoops_clblocks並套用theme_blockcenter_l.html
    • 中右區(centerRcolumn):所有$xoops_clblocks並套用theme_blockcenter_r.html
    • 右區(rightcolumn):所有$xoops_rblocks並套用theme_blockright.html
  5. 底區(footerbar):布景之poweredby.gif
  6. 頂區、尾區無法用區塊控制。一定會帶出來。但可自由設計。
  7. 內容放置區本質是td,:之後是放置區所要放置的區塊。
  8. 區塊本質是div,不是區塊放置區。class名稱為blockContent。
  9. 內容區本質是div,class名稱為Content。

(二)default布景中的各放置區樣版:

  1. theme_blockleft.html :blockTitle、blockContent
  2. theme_blockcenter_c.html:用fieldset包legend秀有區塊抬頭邊框,內放區塊內容。
  3. theme_blockcenter_l.html:同上。
  4. theme_blockcenter_r.html:同上。
  5. theme_blockright.html :blockTitle、blockContent

(三)用文字編輯器編:

  1. 註解用<!-- 說明 -->,說明前後需有空白。
  2. <!-- 在中欄品字三欄之下放內容區 -->,這段big5註解在utf-8字網頁中,IE5.5、ie6會破壞標記,firefox不會。最好在utf-8網頁中不要用big5註解。
  3. <fieldset>內容</fieldset>會將內容用框線包起來,在<fieldset></fieldset>之中找到第一個<LEGEND>框線抬頭</LEGEND>,將做為此方框框線的抬頭。

(四)用網頁編輯器:

  1. Dreamweaver MX2004中文版,不會去亂動程式碼。其他會將 smarty 的角括號<>改成代碼&lt;&gt;。
  2. 進行替換:
    • <{$xoops_url}>=>「../..」或「http://localhost」或絕對徑「網頁根/themes/自訂布景/」。最後不加/。
    • <{$xoops_theme}>=>「自訂布景名稱」
    • <{$xoops_themecss}>=>布景css檔位置「../../themes/自訂布景/style.css」或「style.css」
    • <{$xoops_charset}>=>「Big5」或「utf8」
    • 這樣可以解出大致的圖文效果,其他免改。
  3. 將圖放入布景目錄下,插入theme.html。
  4. 換回Smarty標籤:
    • 「字集」=><{$xoops_charset}>
    • 「css檔」=><{$xoops_themecss}>
    • 「自訂布景名稱」=><{$xoops_theme}>
    • 「xoops根目錄」=><{$xoops_url}>
    • 「&lt;&gt;」=>< >

五、修改css:

(一)根目錄xoops.css:

  1. 圖無邊。
  2. #隱藏文字
  3. pag原色、作用、不作用。
  4. 主選單連結:連結、已連結、選單頭、選單中、次選單。
  5. 使用者選單連結:連結、已連結、選單頭(保留未設)、選單反白。

(二)default布景中的style.css:

  1. body
  2. table
  3. table td
  4. th
  5. a
  6. h1-h5保留未設。
  7. ul
  8. li
  9. 按鈕(input.formButton)保留未設。
  10. 項目(.item):設13項。
  11. 廣告區(headerbanner)
  12. 頂區邊界(headerbar)
  13. headerlogo沒出現
  14. 左區:左區、th、div.blockTitle、div.blockContent
  15. 中區:中區、th
  16. 中中區:中中區、legend.blockTitle、div.blockContent
  17. 中左區:中左區、legend.blockTitle、div.blockContent
  18. 中右區:中右區、legend.blockTitle、div.blockContent
  19. 內容區
  20. 尾區
  21. 主選單連結:連結、已連結、選單頭、選單中、次選單。
  22. 使用者選單連結:連結、已連結、選單頭、選單反白。
  23. 外、頭、尾、奇、偶(.outer、.head、.foot、.even、.odd)。
  24. 奇、偶td
  25. 錯誤訊息、確認訊息、結果訊息。
  26. xoops碼、xoops引述。
  27. .com之抬頭、文字、使用者靜止、使用者靜止標題、使用者狀態、使用者歸類、使用者歸類文、使用者歸類圖、使用者名稱、使用者圖、日期、日期標題。

(三)Box Model:

  1. Box Model
    ┌───────────┐
    │┌─────────┐│
    ││┌──────┐  ││
    │││┌────┐│  ││
    ││││content ││  ││
    │││└────┘│  ││
    │││  padding   │  ││
    ││└──────┘  ││
    ││     border       ││
    │└─────────┘│
    │       margin         │
    └───────────┘
  2. width 和 height 是 content 的寬和高,而沒有包含 border 和 padding 。
  3. IE5/5.5 時代,一個元素的寬高則包含了 content + padding + border 。這個錯誤的實作由Box Model Hack提供了解決之道。
  4. 元素上色的部份,除了有特別說明外,都是包含 border + padding + content ,這點非常重要!因為除了 body 標籤外,元素的 background 屬性的作用都不會包含 margin。
  5. 設定背景色時, Firefox 則是作用在 border + padding + content 上,正確。 IE 是作用在 padding + content ,不良。
  6. 沒有指定元素的寬高時,那麼該元素的內容就會受到 padding 所擠壓。有行內顯示元素時,我們可以利用 padding 的設定來讓它們在我們想要的地方折行,而不用對 content 指定寬度。
  7. 行內顯示元素緊鄰而沒有階層關係,它們的邊界距離就是「左元素」的 margin-right 加上「右元素」的 margin-left 。
  8. 區塊顯示元素緊鄰,前後會加入換行,它們的邊界距離是重疊的!而當「上元素」的 margin-bottom 大於「下元素」的 margin-top 時,上下元素的實際距離就以「上元素」的 margin-bottom 為準。
  9. 父子元素
    ┌─────┐┐
    │┌───┐││
    ││子元素││父元素
    │└───┘│content
    │  margin  ││
    └─────┘┘
  10. IE6 就算指定了父元素的 height ,如果子元素的高度超過父元素的 height ,父元素就會被撐大,然後保留子元素 margin-bottom 的空間;而 FireFox 就不會。
  11. 「元素與元素間緊鄰」時,我們將 margin 設定為負值,會使得 margin 設定為負值的元素「疊」到另一個元素上 (不過還是要視另一個元素所設定的邊界距離而定) 。例如,我們將 A 區塊的 margin-bottom 設為 0 , B 區塊的 margin-top 設為 -10px ,那麼 B 區塊的文字就會疊到 A 區塊的文字上。
  12. 「元素間有階層性關係」時的關係,如果子元素的所指定的 margin 負值的絕對值大於父元素的 border + padding 時,就會使得子元素跑到父元素的外部去了。詳見圖BoxModel_files/margin4.png。
  13. 浮動請見Float

六、marriage布景:

(一)修改marriage布景中的theme.html:

  1. 修改頂區,去掉所有id,改成圖底放文。
  2. 修改底區,去掉所有id,成寫信求救。
  3. 設計要用中中、中左、中右三放置區成品字,刪左、右區。將中中、中左、中右樣版改寫入theme.html,並去除抬頭邊框。
  4. 內容區改放中中放置區。
  5. 設計一
    div 調中
    ┌寬602 ─────────┐
    │高82:底圖秀字           ├tr:header
    └────────────┘
     div
    ┌寬602 ─────────┐
    │td寬602:centercolumn    │
    │if有中組區塊才秀        │
    │ ┌寬100%──────┐ │
    │ │  centerCcolumn   │ │
    │ │  諸中中組區塊    │ │
    │ │  div:ccontent    │ │
    │ │   內容區/div     │ │
    │ ├────┬────┤ │
    │ │centerer│center  │ │
    │ │Lcolumn │Rcolumn │ │
    │ │諸中左組│諸中右組│ │
    │ │區塊    │區塊    │ │
    │ └────┴────┘ │
    │/if                     │
    └────────────┘
     /div
    ┌寬602 ─────────┐
    │寬602:求救連結          │
    └────────────┘
    /div
  6. 設計二(區塊數最少)
    div 調中
    ┌寬602 ────────┐
    │高82:底圖秀字         │
    ├───────────┤
    │高28:三連結           │
    ├───────────┤
    │td寬602:centerCcolumn │
    │   if有中組區塊要秀   │
    │     諸中中組區塊     │
    │   /if                │
    │     div:ccontent     │
    │      內容區/div      │
    ├───────────┤
    │高40:求救連結         │
    └───────────┘
    /div

(二)修改marriage布景中的style.css:

  1. 改td#headerbanner和body同底色。
  2. 改所有表格撐滿畫面,將table中的width:100%;拿掉。
  3. 改中中、中左、中右的基本設定。
  4. 設定二的重點在中中組諸區塊和內容區是上下緊鄰元素,其距離為兩者的下上margin重疊。設定及說明如下:
    • td#centerCcolumn {width:100%;padding:0px 0px 0px 0px;} 放置區撐滿,上右下左對內壓邊0,即其內容物對外撐滿。
    • div.blockContent {background-color:底色;line-height:120%;}
      底色含border以內,不含margin。div的特性是自動撐滿,所以其border、margin、padding預設為0。
    • div#content {background-color:底色;border:1px solid 底色;text-align:left;}
      每頁一定有,首頁div內容為空,只秀出極細的色塊。但其他頁div內容不為空,此時要注意:別讓border和padding同時為0,這樣會使div強迫在上(或下)隔開一大塊空白,以與div以外部分區隔。
      解決之道是將border設成底色,或是設定padding;這樣就不會強迫作出透明的寬界。

(三)在mainfile.php中加「define('HBW_PASS', '通行碼');」

(四)複製樣版(諸區塊之樣版)到marriage。並改為預設,這樣才能改登入區塊之樣版。default之區塊樣版不准修改。

(五)造四區塊:

  1. marriage0中中,順位0,所有頁面。
  2. marriage1中左,順位0,首頁。
  3. marriage2中右,順位0,首頁。
  4. marriage3中右,順位1,首頁。

(六)調區塊:

  1. 主選單不顯示。
  2. 使用者不顯示。
  3. 登入改不顯示。

(七)上傳布景marriage布景目錄。

(八)上傳諸php到marriage子目錄。

(九)偏好設定,選marriage布景、marriage樣版。不快取。

(十)群組中,讓訪客對三區塊有權限。

(十一)上傳camp、room、cabin三資料表。

陸、將內容嵌入xoops

一、嵌入自訂網頁:

  1. 造檔
    <?php
    include_once "../mainfile.php";                   //載入 XOOPS 系統設定檔
    include_once XOOPS_ROOT_PATH."/header.php";       //載入檔頭
    $xoopOption['show_rblock']=1;                     //顯示右區塊,0不顯示
    ?>
    
    放自己做的網頁
    
    <?php
    include_once XOOPS_ROOT_PATH."footer.php";        //載入檔尾,一定要有,不然網頁帶不出來
    ?>
    
  2. 把上檔之連結<a href="{X_SITEURL}/自訂目錄/自訂網頁.php">說明</a><br>放入自訂區塊的「內容」中。
    注意{X_SITEURL}是常數。
  3. 到「系統/群組」中,將區塊使用權限開給訪客。

二、在主選單中插入連結:

  1. 造檔同上
  2. 「系統/樣版」中選default之複本。命名為自訂的樣版組。
  3. 「系統/偏好設定/一般設定」,預設樣版組選自訂的樣版組。
  4. 「系統/區塊」中編輯主選單區塊,編輯樣版。其二層選項在<!-- start module menu loop -->和<!-- end module menu loop -->之間,
    在其前或其後加上自訂的連結「<a class="menuMain" href="<{$xoops.url}>/jjxoops/自訂目錄/自訂網頁.php">說明</a><br>」
    其中<{$xoops.url}>代表網址,不是xoops所在目錄,而且是變數不是常數,這樣網址改變才不必改模組。

三、插入外部網頁:

  1. 使用時機:無法取得原始碼、原始碼常變動、原始碼太複雜。
  2. 造檔 get_url.php ,和mainfile.php放同目錄:
    <?php
    include_once "mainfile.php";                      //載入 XOOPS 系統設定檔
    include_once "header.php";                        //載入檔頭
    $urladdress = rawurldecode($_GET['urladdress']);  //用法 http://your_ip/xoops/get_url.php?urladdress=www.edu.tw
    
    OpenTable();                                      //可省
    echo "<iframe SRC=\"http://$urladdress\" WIDTH=\"100%\"  HEIGHT=\"800\"  FRAMESPACING=0 FRAMEBORDER=no  BORDER=0 SCROLLING=auto></iframe>";
    CloseTable();                                     //可省
    
    include_once "footer.php";                        //載入檔尾
    ?>
    
  3. 將「<a class="menuMain" href="<{$xoops.url}>/jjxoops/get_url.php?urladdress=目的地">說明</a><br>」嵌入主選單區塊樣版中。
  4. 或造 instpage.php (在光碟目錄3)和mainfile.php放同目錄,將「<a class="menuMain" href="<{$xoops.url}>/jjxoops/instpage.php?r=顯隱&w=寬度&h=高度&url=目的地">說明</a><br>」嵌入主選單區塊樣版中。

四、使用內容管理模組(暫略):

柒、模組架構

○、模組概說:

  1. 模組是一組有特定功能的php,所以出輸出於「內容區」。
  2. 諸php的連結出現在主選單中。
  3. 其管理介面出現在「管理員選單」中。
  4. 是個區塊顯示選項,任一區塊可以選擇出現於「首頁」「所有頁面」「某模組」。
  5. 其內附的區塊可以出現在其他模組中。
  6. 有用的模組:newbb討論區,eguide活動報名,xcgal網路相簿,fileup檔案文件櫃,tadbook2線上書,WordPress部落格,共筆暫無好用者。

一、xoops modules 主要目錄及檔案:

  1. xoops_version.php 檔案 : 模組定義檔,這個檔案為xoops 模組的核心設定,透過這個檔案的設定,我們寫的模組才能以xoops 安裝模組的方式安裝。
  2. index.php : 模組首頁程式
  3. admin 目錄 : 管理程式存放目錄
  4. blocks 目錄 : 區塊程式存放目錄
  5. images 目錄 : 模組圖檔存放目錄
  6. language 目錄 : 模組語系存放目錄,在此目錄下再以目錄名稱代表不同的語系,預設為 english,繁體中文為 tchinese
    • modinfo.php -- 模組訊息語系,管xoops_version.php和/admin/menu.php,前置字串常用_MI。
    • main.php -- 主要程式語系,管index.php及所有檔案,除區塊和管理目錄外,前置字串常用_MD。
    • admin.php -- 管理程式語系,管管理目錄下所有檔案,如不多可整合進main.php,前置字串常用_AM。
    • blocks.php -- 區塊語系,管區塊目錄下所有檔案,前置字串常用_MB。
  7. sql 目錄 : 模組資料表存放目錄
  8. templates 目錄 : 模組樣版檔存放目錄

二、以docman模組為例:

  1. 造xoops_version.php : 但其中的值用 _MI_DOCMAN_XXXX 表示。
  2. 在語系檔modinfo.php中定 define("_MI_DOCMAN_XXXX","某語系字串");
  3. 製作一個模組的logo圖檔到 images 下,並在xoops_version.php中以$modversion['image']指示路徑檔名。
  4. 寫index.php入口,導向其中一個功能upload.php。
  5. 寫功能php及其對應之樣版。並在xoops_version.php中以$modversion['templates'][幾]['file']指示樣版檔。
  6. 寫mysql.sql,可由phpMyAdmin產生。並在xoops_version.php中以$modversion['sqlfile']['mysql']指示sql檔,以$modversion['tables'][幾]指示資料表
  7. 在/模組/blocks中加入區塊php內含秀function,該function最後return $block;在/模組/templates/blocks加樣版檔在其中{foreach from=$block};在xoops_version.php中以$modversion['blocks'][幾]['xxxx']指示區塊php、抬頭、說明、秀function、樣版檔。
  8. 在xoops_version.php中以$modversion['sub'][幾]['name'],$modversion['sub'][幾]['url']建子選單。
  9. 加評論功能:
    1. 從news(新聞)官方模組中拷comment_new.php,comment_delete.php,comment_edit.php,comment_post.php,comment_replay.php五程式到模組目錄,不修改。
    2. 在xoops_version.php中以$modversion['hasComments'] = 1;指示有評論;以$modversion['comments']['pageName']指示掛評論的檔;以$modversion['comments']['itemName']指示評論的key欄。
    3. 在樣版中掛入評論,參看docman_sel.html。
  10. 加搜尋功能:
    1. 啟用「搜尋」區塊。
    2. 在xoops_version.php中以$modversion['hasSearch'] = 1;指示能搜尋;以$modversion['search']['file']指示搜尋函式所在檔;以$modversion['search']['func']指示搜尋函式名稱。
    3. 模組下建include目錄。
    4. 從news(新聞)官方模組中的include目錄拷search.inc.php到本模組的include目錄。
    5. 改search.inc.php十個地方:函式名(2)、選取資料表及欄位(4)、造搜尋字串(9)、造搜尋字串(12)、定排序(16)、放小圖(21)、搜到檔案如何連結過去(22)、搜到檔案之標題(23)、搜到檔案之時間戳記(24)、搜到檔案之發布者(25)
  11. 加管理介面:
    1. 在xoops_version.php中以$modversion['hasAdmin'] = 1;指示能通知;$modversion['adminindex'] = "admin/index.php";指示管理介面程式;$modversion['adminmenu'] = "admin/menu.php";指示管理介面選單。
    2. 模組下建admin目錄,下建index.php,menu.php兩檔。
    3. menu.php中每一選項,定兩個陣列元素值:$adminmenu[幾]['title']放選項名,$adminmenu[幾]['link']選項連向那一支php,如admin/index.php。幾,從0編起。
    4. index.php中先include xoops之下include/cp_header.php,呼叫xoops_cp_header(); xoops_cp_footer(),在兩者之間放入主要部分。
  12. 加偏好設定,就是在xoops_config中加一筆資料:
    1. conf_id :流水號,每更新一次模組,就將舊設定刪除,產生新的流水號。
    2. conf_modid :模組編碼。
    3. conf_catid :設定分類編碼,分六類。模組編號設定常為無類,值0。
    4. conf_name :設定之變數名,由$modversion['config'][n]['name']取得。
    5. conf_title :設定之抬頭,由$modversion['config'][n]['title']='常數名';取得。考慮到多國化,要派入「常數名」而不是常數值,所以常數名必須加引號。
    6. conf_value :設定值。$modversion['config'][n]['default']派入預設值。
    7. conf_desc :設定之說明,由$modversion['config'][n]['description']='常數名';取得。考慮到多國化,要派入「常數名」而不是常數值,所以常數名必須加引號。
    8. conf_formtype :分文字框(textbox)、大量文字框(textarea)、選單(select)、複選選單(select_multi)、是否(yesno)、單選群組(group)、複選群組(group_multi)七種。由$modversion['config'][1]['formtype']取得。
    9. conf_valuetype:分文字(text)、整數(int)、浮點數(float)、陣列(array)或其他型態
    10. conf_order :排序。由n決定。
    11. 由$modversion['config'][n]['options']=array('key'=>value,'key'=>value…);決定選單項目。
    12. 引用設定值$xoopsModuleConfig['設定之變數名'],用於php中。
    13. 模組加入評論功能會生出「評論規則」及「允許匿名發表評論嗎?」兩項偏好設定。
  13. 加通知功能:
    1. 在xoops_version.php中以$modversion['hasNotification'] = 1;指示能通知
    2. 樣版信可用標籤,見10-50頁

捌、官方或有用模組

一、系統模組:

(一)管理目錄下諸目錄,每一目錄管一系統管理介面設定項:

  1. 評論 comments
  2. 寄信給使用者 mailusers
  3. 模組 modulesadmin
  4. 區塊 blocksadmin
  5. 偏好設定 preferences
  6. 圖片管理 images
  7. 群組 groups
  8. 頭像管理 avatars
  9. 尋找使用者 findusers
  10. 編輯使用者 users
  11. 樣版 tplsets
  12. 使用者等級 userrank
  13. 表情符號 smilies
  14. 廣告 banners
  15. 版本 version (執行結果是Access Denied)

(二)諸樣版:

甲、2.0.1x官方模組

二、討論區模組:

  1. 新增分類。
  2. 新增討論版:名稱、簡介必填,版主必選。
  3. 討論版之下,分主題(文章)。
  4. 發表新文章(主題)及回應。
  5. 由上方「主頁/討論區/主題」,可以移到動要發言的地方。
  6. 下方四按鈕,可將某一主題「上鎖,不准回應」「移到其他討論版」「刪除」「固定於本版頂端」
  7. 每編發言有刪除鈕,可刪該發言。
  8. 整個主題有刪除鈕,刪整個主題。
  9. 私人討論版在建版時選私人區域。然後進「討論區設定/私人討論版權限設定」,指定該版的使用者。
  10. 「討論區設定/討論版主題索引同步化」重做主題索引。當討論區怪怪的,對不太起來時就重做索引。

三、FAQ:

  1. 新增分類。
  2. 分類下,可增加一對一對的問與答。

四、夥伴網站:

  1. 加上友站的圖連結(通常直接用該站的圖)
  2. 加上該站的url。

五、群組管理:

  1. 預置三群組:站務管理者、註冊會員、訪客。
  2. 可自訂群組。
  3. 每一群組各自設模組使用權限、區塊使用權限;模組管理權限、系統管理權限。

六、區塊管理:

  1. 先指定頁別(如首頁)、身份別(如訪客),會秀出所有可用區塊。
  2. 「編輯」可指定該區塊可顯示於那些頁面中。

七、精華文章:

  1. 一定要有代表圖。
  2. 圖放到/modules/sections/images/。

八、投票:

  1. 設定題目、說明、選項。
  2. 同ip不能投兩次,避免灌票。

乙、2.2.4版

名稱 資料夾 版次 功能 下載點
j1 系統 system 2.13
j2 私人訊息 pm 0.1
j3 使用者管理 profile 0.1
j4 通訊錄 commbook 0.1
j5 檔案上傳 uploader 1.3 架站王21,架站機13
j6 行事曆 piCal 0.89 架站王17,問題6
j7 CBB論壇 newbb 3.04 架站王8,架站機16,問題6
j8 新聞區 news 1.1 架站王7,架站機10,問題6
j9 線上書籍 tadbook2 2 問題6
j10 線上報名 eguide 1.64 架站機9
j11 流量統計 istas 2.1 架站機7







檔案下載 mydownloads 架站王9
檔案下載 wfdownloads 問題6
精華區 sections 架站王12
FAQ faq 架站王13
網站連結 mylinks 1.1 架站王14,架站機15
電子相簿 xcGallery 2 架站王16,架站機19
電子報 pp-news 架站王18
投票 xoopspoll 1 架站王19,架站機14
wordpress wordpress 1 blog 架站王22,架站機18
protector protector 2.53 防護 架站王23,架站機20,問題6
星座探索 astro 1.6 算命 架站機8
隨機小語 randomquote 1 架站機11
天氣預報 weather 1 架站機12
購物車 Cart 0.4 架站機17
友站新聞 xmline 1.03 RSS 孟君
夥伴網站 xoopspartners 1.1 孟君

玖、系統常數、變數、函式、物件

一、載入程序:

二、常數:

  1. "XOOPS_MAINFILE_INCLUDED",1:是否載入mainfile
  2. 'XOOPS_ROOT_PATH',路徑:xoops所在
  3. 'XOOPS_URL',url:xoops所在url
  4. 'XOOPS_CHECK_PATH',1:對抗外來執行稿
  5. 'XOOPS_DB_TYPE','mysql'
  6. 'XOOPS_DB_PREFIX',前置字
  7. 'XOOPS_DB_HOST','localhost'
  8. 'XOOPS_DB_USER',資料庫帳號
  9. 'XOOPS_DB_PASS',密碼
  10. 'XOOPS_DB_NAME',資料庫名
  11. 'XOOPS_DB_PCONNECT',0:非持續連結
  12. 'XOOPS_GROUP_ADMIN','1'
  13. 'XOOPS_GROUP_USERS','2'
  14. 'XOOPS_GROUP_ANONYMOUS',3
  15. "SMARTY_DIR", XOOPS_ROOT_PATH."/class/smarty/"

三、全域變數:(以前置字kpfood為例)

(一)超集全域變數:1個

  1. $GLOBALS

(二)通道:15個

  1. $HTTP_POST_VARS 及 $_POST :
  2. $HTTP_GET_VARS 及 $_GET :
  3. $HTTP_COOKIE_VARS 及 $_COOKIE :放 [PHPSESSID],不同客戶不同值
  4. $HTTP_SERVER_VARS 及 $_SERVER :來自Apach
  5. $HTTP_ENV_VARS 及 $_ENV :來自作業系統
  6. $HTTP_POST_FILES 及 $_FILES :
  7. $HTTP_SESSION_VARS及 $_SESSION:來自[PHPSESSID]鑑別諸客戶各自的變數
  8. $_REQUEST :

(三)單一值:2個

  1. $xoopsRequestUri => /modules/kpfood/test6.php
  2. $xoopsUserIsAdmin => 1(布林值)

(四)陣列:3個

(五)物件:12個

(六)物件詳述:

(七)全域變數清單:$GLOBALS(由PHP提供)。基本的共33個含:

  1. GLOBALS
  2. HTTP_POST_VARS
  3. _POST
  4. HTTP_GET_VARS
  5. _GET
  6. HTTP_COOKIE_VARS [PHPSESSID] => bce48b36903ed2d3c2c7154482a2f99f
  7. _COOKIE [PHPSESSID] => bce48b36903ed2d3c2c7154482a2f99f
  8. HTTP_SERVER_VARS [HTTP_HOST] => kpfood.kpvs.tp.edu.tw [HTTP_USER_AGENT] => Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW; rv:1.7.10) Gecko/20050717 Firefox/1.0.6 [HTTP_ACCEPT] => text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 [HTTP_ACCEPT_LANGUAGE] => zh-tw,en-us;q=0.7,en;q=0.3 [HTTP_ACCEPT_ENCODING] => gzip,deflate [HTTP_ACCEPT_CHARSET] => Big5,utf-8;q=0.7,*;q=0.7 [HTTP_KEEP_ALIVE] => 300 [HTTP_CONNECTION] => keep-alive [HTTP_COOKIE] => PHPSESSID=bce48b36903ed2d3c2c7154482a2f99f [HTTP_CACHE_CONTROL] => max-age=0 [PATH] => /sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin [SERVER_SIGNATURE] => Apache/2.0.53 (Fedora) Server at kpfood.kpvs.tp.edu.tw Port 80 [SERVER_SOFTWARE] => Apache/2.0.53 (Fedora) [SERVER_NAME] => kpfood.kpvs.tp.edu.tw [SERVER_ADDR] => 203.72.253.2 [SERVER_PORT] => 80 [REMOTE_ADDR] => 59.124.63.146 [DOCUMENT_ROOT] => /var/www/html/kpfood [SERVER_ADMIN] => pake@kpvs.tp.edu.tw [SCRIPT_FILENAME] => /var/www/html/kpfood/modules/kpfood/test6.php [REMOTE_PORT] => 1420 [GATEWAY_INTERFACE] => CGI/1.1 [SERVER_PROTOCOL] => HTTP/1.1 [REQUEST_METHOD] => GET [QUERY_STRING] => [REQUEST_URI] => /modules/kpfood/test6.php [SCRIPT_NAME] => /modules/kpfood/test6.php [PHP_SELF] => /modules/kpfood/test6.php [PATH_TRANSLATED] => /var/www/html/kpfood/modules/kpfood/test6.php [argv] => 空陣列 [argc] => 0
  9. _SERVER:同上
  10. HTTP_ENV_VARS [LANG] => C [TERM] => xterm [PATH] => /sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin [PWD] => / [SHLVL] => 1 [_] => /sbin/initlog
  11. _ENV:同上
  12. HTTP_POST_FILES
  13. _FILES
  14. HTTP_SESSION_VARS [xoopsUserId] => 31 [xoopsUserGroups] => Array [0] => 1 [1] => 2 [2] => 4 [3] => 6 [4] => 7 [5] => 14 [xoopsUserLastLogin] => 1172453920
  15. _SESSION:同上
  16. _REQUEST [PHPSESSID] => bce48b36903ed2d3c2c7154482a2f99f
  17. xoopsRequestUri => /modules/kpfood/test6.php
  18. xoopsUserIsAdmin => 1
  19. xoopsOption [pagetype] => main [theme_use_smarty] => 1
  20. xoopsModuleConfig [KPFOOD] => 0 [com_rule] => 1 [com_anonpost] => 0
  21. xoopsConfig [sitename] => 開平餐飲,開中高中 [slogan] => 科學.藝術.技術.人文 [adminmail] => maylinfish@gmail.com [language] => tchinese [startpage] => -- [server_TZ] => 8 [default_TZ] => 8 [theme_set] => kpfood_d2.2 [theme_set_admin] => default [theme_fromfile] => 1 [theme_set_allowed] => Array [0] => default [1] => fisubgreen [2] => kpfood_d2.2 [3] => phpkaox [4] => x2t [5] => xmt [template_set] => default [anonymous] => 匿名 [gzip_compression] => 0 [usercookie] => xoops_user [use_mysession] => 0 [session_expire] => 15 [session_name] => xoops_session [debug_mode] => Array [0] => 0 [banners] => 0 [closesite] => 0 [closesite_okgrp] => Array [0] => 1 [closesite_text] => 本站目前暫時關閉維護中. 請稍後再來. [my_ip] => 127.0.0.1 [use_ssl] => 0 [sslpost_name] => xoops_ssl [sslloginlink] => https:// [com_mode] => nest [com_order] => 0 [enable_badips] => 0 [bad_ips] => Array [0] => 127.0.0.1 [module_cache] => Array [2] => 0 [3] => 0 [34] => 0 [30] => 0 [32] => 0 [31] => 0 [14] => 0 [15] => 0 [28] => 0 [37] => 0
  22. xoopsSecurity xoopssecurity Object [errors] => Array
  23. xoopsErrorHandler xoopserrorhandler Object [_errors] => Array [_showErrors] => [_isFatal] =>
  24. sess_handler xoopssessionhandler Object [db]
  25. xoopsLogger 即 $xoopsDB->logger [queries] => Array [core] => Array [0] => Array [sql] => SELECT * FROM kpfood_config WHERE (conf_modid = '1' AND conf_catid = '1') ORDER BY conf_order ASC [error] => [errno] => [sql_time] => [1] => Array [sql] => SELECT sess_data FROM kpfood_session WHERE sess_id = 'bce48b36903ed2d3c2c7154482a2f99f' [error] => [errno] => [sql_time] => [2] => Array [sql] => SELECT * FROM kpfood_users u, kpfood_user_profile p WHERE u.uid = p.profileid AND uid = '31' LIMIT 0, 1 [error] => [errno] => [sql_time] => [3] => Array [sql] => SELECT * FROM kpfood_modules WHERE dirname = 'kpfood' [error] => [errno] => [sql_time] => [4] => Array [sql] => SELECT * FROM kpfood_config WHERE (conf_modid = '28') ORDER BY conf_order ASC [error] => [errno] => [sql_time] => [5] => Array [sql] => SELECT * FROM kpfood_config WHERE (conf_modid = '1' AND conf_catid = '3') ORDER BY conf_order ASC [error] => [errno] => [sql_time] => [blocks] => Array [extra] => Array [logstart] => Array [XOOPS] => Array [0] => 0.93774000 [1] => 1172458973 [logend] => Array [executions] => Array [XOOPS] => 1 [context] => module
  26. xoopsDB xoopsmysqldatabaseproxy Object [conn] => Resource id #12 [prefix] => kpfood [logger] => xoopslogger Object 同 $xoopsLogger
  27. config_handler xoopsconfighandler Object [_cHandler] => xoopsconfigitemhandler Object [db] 同 $xoopsDB [table] => kpfood_config [keyName] => conf_id [className] => XoopsConfigItem [identifierName] => conf_title [_oHandler] => xoopsconfigoptionhandler Object [db] 同 $xoopsDB [table] => kpfood_configoption [keyName] => confop_id [className] => XoopsConfigOption [identifierName] => confop_name [_cachedConfigs] => Array
  28. member_handler
    • _gHandler xoopsgrouphandler Object [db] 同 $xoopsDB [table] => kpfood_groups [keyName] => groupid [className] => XoopsGroup [identifierName] => name
    • _mHandler xoopsmembershiphandler Object [db] [table] => kpfood_groups_users_link [keyName] => linkid [className] => XoopsMembership [identifierName] =>
    • _uHandler xoopsuserhandler Object
      • db
      • table => kpfood_users
      • keyName => uid
      • className => XoopsUser
      • identifierName => uname
      • _pHandler xoopsprofilehandler Object
        • db
        • table => kpfood_user_profile
        • keyName => profileid
        • className => XoopsProfile
        • identifierName =>
        • _fHandler xoopsprofilefieldhandler Object [db] [table] => kpfood_user_profile_field [keyName] => fieldid [className] => XoopsProfileField [identifierName] => field_title
        • _fields _user_profile_field表中,共25筆,每筆每欄六值,一筆須182行描述,25筆須4550行描述
    • _members Array [31] => xoopsuser Object 即 $xoopsUser
  29. xoopsUser [_groups] => Array [0] => 1 [1] => 2 [2] => 4 [3] => 6 [4] => 7 [5] => 14 [_isAdmin] => Array [28] => 1 [_rank] => [_isOnline] => [_profile] => xoopsprofile Object [vars] => Array profile諸欄,每欄有value,required,data_type,maxlength,changed,options六值,如下 [profileid] => Array [value] => 31 [required] => 1 [data_type] => 3 [maxlength] => [changed] => [options] => [umode] => Array [uorder] => Array … [cleanVars] => Array [_isNew] => [_isDirty] => [_errors] => Array [_filters] => Array [vars] => Array users表諸欄,每欄有value,required,data_type,maxlength,changed,options六值,如下 [uid] => Array [value] => 31 [required] => [data_type] => 3 [maxlength] => [changed] => [options] => [loginname] => Array [uname] => Array [name] => Array [email] => Array [pass] => Array [rank] => Array [level] => Array [user_avatar] => Array [cleanVars] => Array [_isNew] => [_isDirty] => [_errors] => Array [_filters] => Array
  30. module_handle xoopsmodulehandler Object [_cachedModule_mid] => Array [_cachedModule_dirname] => Array [db] [table] => kpfood_modules [keyName] => mid [className] => XoopsModule [identifierName] => name
  31. xoopsModule xoopsmodule Object [modinfo] => [adminmenu] => [_msg] => [vars] => Array modules表諸欄,每欄有value,required,data_type,maxlength,changed,options六值,如下 [cleanVars] => Array [_isNew] => [_isDirty] => [_errors] => Array [_filters] => Array
  32. xTheme xtheme Object [name] => default [fullName] => [path] => /var/www/html/kpfood/themes [url] => http://kpfood.kpvs.tp.edu.tw/themes [bufferOutput] => 1 [contentType] => text/html [templateFiles] => Array [defaultFile] => theme.html [pageTpl] => [pageType] => [enableBanner] => [tplEngine] => xoopstpl Object 內容和$xoopsTpl完全一樣 [title] => Array [titleSeparator] => - [banner] => [footer] => [js] => Array [0] =>
  33. xoopsTpl xoopstpl Object [_canUpdateFromFile] => 1 [template_dir] => /var/www/html/kpfood/themes [compile_dir] => /var/www/html/kpfood/templates_c [config_dir] => configs [plugins_dir] => Array [0] => /var/www/html/kpfood/class/smarty/plugins [debugging] => [error_reporting] => [debug_tpl] => [debugging_ctrl] => NONE [compile_check] => 1 [force_compile] => [caching] => 0 [cache_dir] => /var/www/html/kpfood/cache [cache_lifetime] => 3600 [cache_modified_check] => [php_handling] => 0 [security] => [secure_dir] => Array [security_settings] => Array [PHP_HANDLING] => [IF_FUNCS] => Array [0] => array [1] => list [2] => isset [3] => empty [4] => count [5] => sizeof [6] => in_array [7] => is_array [8] => true [9] => false [INCLUDE_ANY] => [PHP_TAGS] => [MODIFIER_FUNCS] => Array [0] => count [ALLOW_CONSTANTS] => [trusted_dir] => Array [left_delimiter] => <{ [right_delimiter] => }> [request_vars_order] => EGPCS [request_use_auto_globals] => 1 [compile_id] => [use_sub_dirs] => [default_modifiers] => Array [default_resource_type] => file [cache_handler_func] => [autoload_filters] => Array [config_overwrite] => 1 [config_booleanize] => 1 [config_read_hidden] => [config_fix_newlines] => 1 [default_template_handler_func] => xoops_template_create [compiler_file] => Smarty_Compiler.class.php [compiler_class] => Smarty_Compiler [config_class] => Config_File [_tpl_vars] => Array [SCRIPT_NAME] => /modules/kpfood/test6.php [xoops_banner] => [xoops_url] => http://kpfood.kpvs.tp.edu.tw [xoops_rootpath] => /var/www/html/kpfood [xoops_langcode] => zh-tw [xoops_charset] => UTF-8 [xoops_version] => XOOPS 2.2.3 Final [xoops_upload_url] => http://kpfood.kpvs.tp.edu.tw/uploads [xoops_requesturi] => /modules/kpfood/test6.php [xoops_sitename] => 開平餐飲,開中高中 [xoops_slogan] => 科學.藝術.技術.人文 [xoops_meta_keywords] => news, technology, headlines, xoops, xoop, nuke, myphpnuke, myphp-nuke, phpnuke, SE, geek, geeks, hacker, hackers, linux, software, download, downloads, free, community, mp3, forum, forums, bulletin, board, boards, bbs, php, survey, poll, polls, kernel, comment, comments, portal, odp, open, source, opensource, FreeSoftware, gnu, gpl, license, Unix, *nix, mysql, sql, database, databases, web site, weblog, guru, module, modules, theme, themes, cms, content management [xoops_footer] => Powered by XOOPS 2.2.3 Final ? 2001-2006 The XOOPS Project [xoops_meta_rating] => general [xoops_meta_author] => XOOPS [xoops_meta_copyright] => Copyright ? 2001-2006 [xoops_meta_description] => XOOPS is a dynamic Object Oriented based open source portal script written in PHP. [xoops_meta_robots] => index,follow [xoops_pagetitle] => 食材管理 [xoops_dirname] => kpfood [xoops_isuser] => 1 [xoops_userid] => 31 [xoops_uname] => 丁志仁 [xoops_isadmin] => 1 [_smarty_vars] => [_sections] => Array [_foreach] => Array [_tag_stack] => Array [_conf_obj] => [_config] => Array [0] => Array [vars] => Array [files] => Array [_smarty_md5] => f8d698aea36fcbead2b9d5359ffca76f [_version] => 2.6.5-dev [_inclusion_depth] => 0 [_compile_id] => [_smarty_debug_id] => SMARTY_DEBUG [_smarty_debug_info] => Array [_cache_info] => Array [_file_perms] => 420 [_dir_perms] => 505 [_reg_objects] => Array [_plugins] => Array [modifier] => Array [function] => Array [block] => Array [compiler] => Array [prefilter] => Array [postfilter] => Array [outputfilter] => Array [resource] => Array [insert] => Array [_cache_serials] => Array [_cache_include] => [_cache_including] =>
  34. 其他*.php所生之全域變數

(八)全域物件方法:

$xoopsSecurity
    [0] => xoopssecurity
    [1] => check
    [2] => createtoken
    [3] => validatetoken
    [4] => cleartokens
    [5] => filtertoken
    [6] => garbagecollection
    [7] => checkreferer
    [8] => checksuperglobals
    [9] => checkbadips
    [10] => gettokenhtml
    [11] => seterrors
    [12] => geterrors
$xoopsErrorHandler
    [0] => xoopserrorhandler
    [1] => getinstance
    [2] => activate
    [3] => handleerror
    [4] => errorpage
    [5] => rendererrors
$sess_handler
    [0] => xoopssessionhandler
    [1] => open
    [2] => close
    [3] => read
    [4] => write
    [5] => destroy
    [6] => gc
$xoopsLogger
    [0] => xoopslogger
    [1] => instance
    [2] => starttime
    [3] => stoptime
    [4] => addquery
    [5] => addblock
    [6] => addextra
    [7] => dumpqueries
    [8] => dumpblocks
    [9] => dumptime
    [10] => dumpextra
    [11] => dumpall
    [12] => getsqldebug
$xoopsDB
    [0] => query
    [1] => connect
    [2] => genid
    [3] => fetchrow
    [4] => fetcharray
    [5] => fetchboth
    [6] => getinsertid
    [7] => getrowsnum
    [8] => getaffectedrows
    [9] => close
    [10] => freerecordset
    [11] => error
    [12] => errno
    [13] => quotestring
    [14] => queryf
    [15] => queryfromfile
    [16] => getfieldname
    [17] => getfieldtype
    [18] => getfieldsnum
    [19] => xoopsdatabase
    [20] => setlogger
    [21] => setprefix
    [22] => prefix
    [23] => xoopsmysqldatabase
    [24] => xoopsmysqldatabaseproxy
$config_handler
    [0] => xoopsconfighandler
    [1] => createconfig
    [2] => getconfig
    [3] => insertconfig
    [4] => deleteconfig
    [5] => deleteconfigoption
    [6] => getconfigs
    [7] => getconfigcount
    [8] => getconfigsbycat
    [9] => createconfigoption
    [10] => getconfigoption
    [11] => getconfigoptions
    [12] => getconfigoptionscount
    [13] => getconfiglist
$member_handler
    [0] => xoopsmemberhandler
    [1] => creategroup
    [2] => createuser
    [3] => getgroup
    [4] => getuser
    [5] => deletegroup
    [6] => deleteuser
    [7] => insertgroup
    [8] => insertuser
    [9] => getgroups
    [10] => getusers
    [11] => getgrouplist
    [12] => getuserlist
    [13] => addusertogroup
    [14] => removeusersfromgroup
    [15] => getusersbygroup
    [16] => getgroupsbyuser
    [17] => loginuser
    [18] => loginusermd5
    [19] => getusercount
    [20] => getusercountbygroup
    [21] => updateuserbyfield
    [22] => updateusersbyfield
    [23] => activateuser
$xoopsUser
    [0] => xoopsuser
    [1] => assignvars
    [2] => getprofile
    [3] => getvar
    [4] => setvar
    [5] => isguest
    [6] => getunamefromid
    [7] => incrementpost
    [8] => setgroups
    [9] => getgroups
    [10] => groups
    [11] => isadmin
    [12] => rank
    [13] => isactive
    [14] => isdisabled
    [15] => isonline
    [16] => uid
    [17] => name
    [18] => uname
    [19] => email
    [20] => url
    [21] => user_avatar
    [22] => user_regdate
    [23] => user_icq
    [24] => user_from
    [25] => user_sig
    [26] => user_viewemail
    [27] => actkey
    [28] => user_aim
    [29] => user_yim
    [30] => user_msnm
    [31] => pass
    [32] => posts
    [33] => attachsig
    [34] => level
    [35] => theme
    [36] => timezone
    [37] => umode
    [38] => uorder
    [39] => notify_method
    [40] => notify_mode
    [41] => user_occ
    [42] => bio
    [43] => user_intrest
    [44] => last_login
    [45] => xoopsobject
    [46] => setnew
    [47] => unsetnew
    [48] => isnew
    [49] => setdirty
    [50] => unsetdirty
    [51] => isdirty
    [52] => initvar
    [53] => assignvar
    [54] => setvars
    [55] => setformvars
    [56] => getvars
    [57] => cleanvars
    [58] => registerfilter
    [59] => _loadfilters
    [60] => xoopsclone
    [61] => seterrors
    [62] => geterrors
    [63] => gethtmlerrors
    [64] => toarray
$module_handle
    [0] => xoopsmodulehandler
    [1] => get
    [2] => getbydirname
    [3] => insert
    [4] => delete
    [5] => getlist
    [6] => loadmodule
    [7] => xoopsobjecthandler
    [8] => create
    [9] => xoopspersistableobjecthandler
    [10] => getobjects
    [11] => convertresultset
    [12] => getcount
    [13] => updateall
    [14] => deleteall
$xoopsModule
    [0] => xoopsmodule
    [1] => loadinfoasvar
    [2] => setmessage
    [3] => getmessages
    [4] => setinfo
    [5] => getinfo
    [6] => mainlink
    [7] => sublink
    [8] => loadadminmenu
    [9] => getadminmenu
    [10] => loadinfo
    [11] => search
    [12] => checkaccess
    [13] => loadlanguage
    [14] => loaderrormessages
    [15] => mid
    [16] => dirname
    [17] => name
    [18] => getbydirname
    [19] => getcurrentpage
    [20] => install
    [21] => update
    [22] => insert
    [23] => executesql
    [24] => inserttemplates
    [25] => gettemplate
    [26] => insertblocks
    [27] => insertconfigcategories
    [28] => insertconfig
    [29] => insertprofilefields
    [30] => executescript
    [31] => insertgrouppermissions
    [32] => xoopsobject
    [33] => setnew
    [34] => unsetnew
    [35] => isnew
    [36] => setdirty
    [37] => unsetdirty
    [38] => isdirty
    [39] => initvar
    [40] => assignvar
    [41] => assignvars
    [42] => setvar
    [43] => setvars
    [44] => setformvars
    [45] => getvars
    [46] => getvar
    [47] => cleanvars
    [48] => registerfilter
    [49] => _loadfilters
    [50] => xoopsclone
    [51] => seterrors
    [52] => geterrors
    [53] => gethtmlerrors
    [54] => toarray
$xTheme
    [0] => xtheme
    [1] => titlestring
    [2] => templatepath
    [3] => display
    [4] => addjs
    [5] => addcss
    [6] => getjs
    [7] => loadglobalvars
    [8] => loadtheme
    [9] => getcachedtemplateid
    [10] => is_cached
    [11] => loadmoduleadminmenu
    [12] => checkcache
$xoopsTpl
    [0] => xoopstpl
    [1] => xoops_settemplatedir
    [2] => xoops_gettemplatedir
    [3] => xoops_setdebugging
    [4] => xoops_setcaching
    [5] => xoops_setcachetime
    [6] => xoops_setcompiledir
    [7] => xoops_setcachedir
    [8] => xoops_fetchfromdata
    [9] => xoops_canupdatefromfile
    [10] => xoops_getcaching
    [11] => smarty
    [12] => assign
    [13] => assign_by_ref
    [14] => append
    [15] => append_by_ref
    [16] => clear_assign
    [17] => register_function
    [18] => unregister_function
    [19] => register_object
    [20] => unregister_object
    [21] => register_block
    [22] => unregister_block
    [23] => register_compiler_function
    [24] => unregister_compiler_function
    [25] => register_modifier
    [26] => unregister_modifier
    [27] => register_resource
    [28] => unregister_resource
    [29] => register_prefilter
    [30] => unregister_prefilter
    [31] => register_postfilter
    [32] => unregister_postfilter
    [33] => register_outputfilter
    [34] => unregister_outputfilter
    [35] => load_filter
    [36] => clear_cache
    [37] => clear_all_cache
    [38] => is_cached
    [39] => clear_all_assign
    [40] => clear_compiled_tpl
    [41] => template_exists
    [42] => get_template_vars
    [43] => get_config_vars
    [44] => trigger_error
    [45] => display
    [46] => fetch
    [47] => config_load
    [48] => get_registered_object
    [49] => clear_config
    [50] => _get_plugin_filepath
    [51] => _is_compiled
    [52] => _compile_resource
    [53] => _compile_source
    [54] => _get_compile_path
    [55] => _fetch_resource_info
    [56] => _parse_resource_name
    [57] => _run_mod_handler
    [58] => _dequote
    [59] => _read_file
    [60] => _get_auto_filename
    [61] => _unlink
    [62] => _get_auto_id
    [63] => _trigger_fatal_error
    [64] => _process_compiled_include_callback
    [65] => _smarty_include
    [66] => _smarty_cache_attrs
    [67] => _include
    [68] => _eval

四、smarty可用全域變數:(6-56)

  1. <{$xoops_isadmin}> :是否為管理員,有沒有管理系統模組的權限。1是,0不是。
  2. <{$xoops_isuser}> :是否為會員,1為會員,0為訪客。
  3. <{$xoops_userid}> :登入者代碼。
  4. <{$xoops_uname}> :登入者姓名。
  5. <{$xoops_method}> :登入者喜歡的通知方式。 ?
  6. <{$xoops_charset}> :預設字集。
  7. <{$xoops_langcode}>:語言。
  8. <{$xoops_sitename}>:網站名稱。
  9. <{$xoops_slogan}> :網站口號。
  10. <{$xoops_footer}> :頁尾文字。
  11. <{$xoops_pagetitle}>:該頁面標題。
  12. <{$xoops_version}> :xoops版本。
  13. <{$xoops_url}> :網站網址。
  14. <{$xoops_rootpath}>:網站實體根目錄。
  15. <{$xoops_theme}> :目前所用布景的目錄名稱。 ?
  16. <{$xoops_themecss}>:目前所用布景的CSS檔名路徑。?
  17. <{$xoops_imageurl}>:布景目錄的網址。 ?
  18. <{$SCRIPT_NAME}>:從XOOPS根目錄算起,請求的檔名路徑,如「modules/news/index.php」
  19. <{$xoops_dirname}>:所在資料夾名稱,如news。
  20. <{$xoops_requesturi}>:被請求的網址,如「/modules/news/article.php?storyid=1」
  21. <{$xoops_upload_url}>:上傳目錄網址。
  22. 後設六變數 <{$xoops_meta_keywords}> 、<{$xoops_meta_rating}> 、<{$xoops_meta_author}> 、<{$xoops_meta_copyright}> 、<{$xoops_meta_description}> 、<{$xoops_meta_robots}>

五、常用函式(在 include/functions.php 中定義):

  1. xoops_error($msg),列印錯誤訊息
  2. xoops_result($msg),列印結果訊息
  3. xoops_confirm($hiddens, $action, $msg, $submit='', $addtoken = true),訊息確認盒
  4. redirect_header($url, $time = 3, $message = '', $addredirect = true),網頁導向函式
  5. xoops_gethandler($name, $optional = false ):載入系統類別定義檔,造出物件,並放入$handlers陣列成為一元素。實例:
    xoops_gethandler('xxx')→載入/kernel/xxx.php→傳回其中Xoops.xxx.Handler的類別→造物件→物件放入$handlers陣列成為元素之一
    實例:
    呼叫 xoops_gethandler('member') 會載入 kernel/member.php ,並建立回傳 XoopsMemberHandler 物件類別
    呼叫 xoops_gethandler('session') 會載入 kernel/session.php ,並建立回傳 XoopsSessionHandler 物件類別
  6. xoops_getmodulehandler(類別名,模組名,$optional = false):
    xoops_getmodulehandler('xxx','mmm')→載入 modules/mmm/class/xxx.php→傳回其中的 xxx(繼承自XoopsObject) 類別作為數據存放實體(相當於一筆),mmmxxxHandler類別作為數據操作的方法(以整筆為單位操作資料)→用mmmxxxHandler造物件

六、核心數據類別XoopsObject:

kernel/object.php 中放三個類別:XoopsObject、XoopsObjectHandler、XoopsPersistableObjectHandler(繼承自XoopsObjectHandler)。

(一)XoopsObject

XoopsObject是標準化的數據儲存物件類別,其中 $vars 屬性相當於資料表的「筆」,$vars 中的每一個元素 $var 相當於資料表的「欄」,每一個 $var 的 key 相當於欄名,值是陣列有七個元素:value(欄值)、required(是否為必須的)、data_type(資料型態)、maxlength(最大長度,XOBJ_DTYPE_TXTBOX 類型專用)、changed(初始值是否被setVar方法改過)、options(諸可選之值,用於select表單元素中)、enumeration(用於 XOBJ_DTYPE_ENUM )。其中 data_type 定義了 21 種資料類別:

  1. XOBJ_DTYPE_TXTBOX
  2. XOBJ_DTYPE_TXTAREA
  3. XOBJ_DTYPE_INT
  4. XOBJ_DTYPE_URL
  5. XOBJ_DTYPE_EMAIL
  6. XOBJ_DTYPE_ARRAY
  7. XOBJ_DTYPE_OTHER
  8. XOBJ_DTYPE_SOURCE
  9. XOBJ_DTYPE_STIME 短時間格式
  10. XOBJ_DTYPE_MTIME 中時間格式
  11. XOBJ_DTYPE_LTIME 長時間格式
  12. 保留
  13. XOBJ_DTYPE_FLOAT
  14. XOBJ_DTYPE_DECIMAL
  15. XOBJ_DTYPE_ENUM
  16. XOBJ_DTYPE_UNICODE_TXTBOX
  17. XOBJ_DTYPE_UNICODE_TXTAREA
  18. XOBJ_DTYPE_UNICODE_URL
  19. XOBJ_DTYPE_UNICODE_EMAIL
  20. XOBJ_DTYPE_UNICODE_ARRAY
  21. XOBJ_DTYPE_UNICODE_OTHER

XoopsObject使用了TextSanitizer物件來做字串檢查。 XoopsObject 內含25種處理變數值的基本方法,如initVar(key,資料型態)用來初始化一個變數並派入$vars[key]。

重要屬性有$vars(存放一筆資料)、$cleanVars(處理好的$var,可以直接放入資料庫)、$_isNew(是否為一個新造的物件)、$_isDirty($vars中是否有任何的值進行了修改)、$_errors(錯誤資訊)、$_filters(在子類中動態註冊附加的過濾器)。並設計了以下26個方法,操作這些屬性:

  1. XoopsObject :類別實體化。內容是空的,未做任何動作。
  2. setNew :把$_isNew設為真
  3. unsetNew :把$_isNew設為假
  4. isNew :傳回$_isNew之值
  5. setDirty :把$_isDirty設為真
  6. unsetDirty :把$_isDirty設為假
  7. isDirty :傳回$_isDirty之值
  8. initVar :初始化變數
  9. assignVar :給變數賦值
  10. assignVars :派陣列給$vars
  11. setVar :給變數賦值並註明是否為gpc
  12. setVars(陣列) :派陣列給$vars並註明是否為gpc
  13. destoryVars :銷毀$vars中的1或多個變數
  14. setFormVars(陣列,前置字):陣列中各元素之key去掉前置字後,元素放入$vars。
  15. getVars :傳回$vars
  16. getValues :丟入諸key,傳回諸值
  17. getVar :丟入一key,依指定型別檢查value後,再傳回value。
  18. cleanVars :清空所有變數的值以便進行儲存並且進行add slashes處理
  19. registerFilter:給類類動態掛載附加的過濾器
  20. _loadFilters :載入這個類別所掛載的過濾器
  21. loadFilters :載入本地過濾器
  22. xoopsClone :獲得當前物件的克隆(複製)
  23. setErrors :增加一條錯誤資訊
  24. getErrors :傳回錯誤訊息陣列
  25. getHtmlErrors :傳回「錯誤訊息的HTML格式」及各列間加 <br />
  26. toArray :傳回 $this->getValues();

(二)XoopsObjectHandler

Xoops中有各種 xxxxxHandler 類別來操作各種不同的數據,其中 XoopsObjectHandler 類別用來與資料表做映射。 XoopsObjectHandler 只是一個抽象類別,四個方法create、get、insert、delete內容都是空的,必須在其子類別中去義好實作。

XoopsObject子類中的方法是操作物件內的諸變數,而各種 Handler 中的方法則是操作整個物件。

(三)XoopsPersistableObjectHandler

XoopsPersistableObjectHandler就是XoopsObjectHandler這個抽象類的實現。一般情況下,我們寫的模組的類都要繼承這個類。其中定義了27個方法去操作資料物件。以下列舉較重要的方法:

  1. 產生一個新的物件:create()
  2. 從數據庫載入一個物件:get($id,$fields)
  3. 插入一個物件到數據庫:insert(&$object)
  4. 從數據庫中刪除物件:delete(&$object)
  5. 刪除所有滿足條件的物件:deleteAll(條件)
  6. 按照條件更新物件的一欄:updateAll(欄名,欄值,條件)
  7. 從數據庫中檢索物件:getObjects(條件)
  8. 取到所有滿足條件的物件:getAll(條件)

(四)自行開發

只要取出/kernel/opject.php和/class/module.textsanitizer.php,就可以當作自己開發的核心。舉例來說,製作表單是一件相當煩瑣的工作,可以設計一個表單類別,輸入XoopsObject後,可以針對相對應的xoops資料型別產生表單。

使用XoopsObject搭配Smarty(或其他樣板引擎)來做MVC模式開發,就可以看到快速開發的效果。由XoopsObject以及 XoopsObjectHandler負責Model,Smarty負責View,程式開發只要專注在Controller上就可以。

七、大型class:

xoopsform:

(一)基本操作:

include_once XOOPS_ROOT_PATH."/class/xoopsformloader.php";
$form = new XoopsThemeForm('表單的標題', '表單的名稱', '接收後送的程式.php');
$form->addElement(new 表單元素,是否必填); // 0非必填,1為必填。預設0。
…
$form->renderValidationJS();              // 驗證表單
$form->display();                         // 輸出表單
(二)可用表單:

  1. themeform.php 中 XoopsThemeForm:使用theme的表格式。
  2. simpleform.php 中 XoopsSimpleForm:抬頭一行(加粗),接著元素一行。
  3. tableform.php 中 XoopsTableForm:不使用theme的表格式。
(三)可用元素:

  1. XoopsFormElement():元素的基本定義
  2. XoopsFormElementTray($caption, $delimeter=" ", $name="", $showCaptions = true):在一列中合併數個Element
  3. XoopsFormButton($caption, $name, $value="", $type="button", $id=""):按鈕,預設為button,可為submit或reset。
  4. XoopsFormLabel($caption="", $value=""):無表單元素列。$value為右方顯示文字,可用html語法。
  5. XoopsFormTextArea($caption, $name, $value="", $rows=5, $cols=50, $id = ""):文字區塊
  6. XoopsFormDhtmlTextArea($caption, $name, $value, $rows=5, $cols=50, $hiddentext="xoopsHiddenText"):文字區塊,無法離開xoops獨立執行。使用dhtmltextarea類別是xoops使用的文字區塊編輯器。
  7. XoopsFormEditor($caption, $name, $editor_configs = null, $noHtml=false, $OnFailure = ""):文字區塊,無法離開xoops獨立執行。和上項都是使用dhtmltextarea類別,不能併用。而且可能還沒寫好,使用上會不正常,xoops本身也沒程式引用。
  8. XoopsFormText($caption, $name, $size, $maxlength, $value="", $id = ""):文字
  9. XoopsFormCheckBox($caption, $name, $value = null, $id = ""):核取方塊組;$value是預選後送值陣列。用->addOption(後送值, "說明訊息")潻加核取方格。
  10. XoopsFormRadio($caption, $name, $value = null, $id = ""):Radio按鈕組;$value是預選值。用->addOption(後送值, "說明訊息")潻加核取按鈕。
  11. XoopsFormRadioYN($caption, $name, $value=null, $yes=_YES, $no=_NO, $id=""):01Radio按鈕組;$value是預選值。
  12. XoopsFormPassword($caption, $name, $size, $maxlength, $value=""):密碼。
  13. XoopsFormFile($caption, $name, $maxfilesize):檔案上傳。
  14. XoopsFormHidden($name, $value, $id=""):隱藏。
  15. XoopsFormHiddenToken($name = 'XOOPS_TOKEN_REQUEST', $timeout = 0):隱藏連線訊息。
  16. XoopsFormCalendar($caption, $name, $initial_value=0, $calendar_options= array(), $calendar_field_attributes = array()):$initial_value初始日期怎麼設都無效,$calendar_options額外的日曆設定項(項=>值),$calendar_field_attributes額外的 input 屬性(屬性=>屬性值),如 value=某日期(YYYY/mm/dd)可設日期的預設值。
  17. XoopsFormTextDateSelect($caption, $name, $size = 15, $value= 0):$value為預設值日期或其秒數,XoopsFormCalendar的子類別,只是為其設定$field_attributes['value']=strftime('%Y/%m/%d', $value);而已,完全可用XoopsFormCalendar取代。和XoopsFormCalendar混用會出包。
  18. XoopsFormDateTime($caption, $name, $size = 15, $value=0):$value只能用秒數,因為要決定時間選那一格。XoopsFormElementTray的子類別,合併 XoopsFormElementTray 及 XoopsFormSelect,並同時後送 name[date],name[time]兩元素構成的陣列
  19. XoopsFormSelect($caption, $name, $value=null, $size=1, $multiple=false, $id=""):$value為預選值,$size是顯示項目數,$multiple決定可否複選。用->addOptionArray(array('值'=>'顯示文字',…))定義諸選項。
  20. XoopsFormSelectCountry($caption, $name, $value=null, $size=1):選國家
  21. XoopsFormSelectEditor(&$form, $name="editor", $value=null, $noHtml=false):選系統可用編輯器
  22. XoopsFormSelectGroup($caption, $name, $include_anon=false, $value=null, $size=1, $multiple=false):選群組
  23. XoopsFormSelectLang($caption, $name, $value=null, $size=1):選語言
  24. XoopsFormSelectMatchOption($caption, $name, $value=null, $size=1):選「開始於、結束於、比對符合、內含」
  25. XoopsFormSelectTheme($caption, $name, $value=null, $size=1):選布景。
  26. XoopsFormSelectTimezone($caption, $name, $value=null, $size=1):選時區
  27. XoopsFormSelectUser($caption, $name, $include_anon = false, $value = array(), $size = 1, $multiple = false):選人。
  28. XoopsFormSelectList($caption, $name, $value=null, $size=1, $handler, $module=null):不了解其中 $handler 代表什麼意思,也查不到

calendar(jscalendar):

(一)安裝校調說明:

  1. 目前版本為1.0,GPL授權。諸檔說明Readme,釋出說明release-notes.html,2005.4.17,以後停止開發。
  2. 放在common下,給各模組共用。
  3. site在http://www.dynarch.com/,還提供動態選單、動態Tabs選單、動態聊天室、導航bar、web的文書處理。
  4. 程式(calendar.js)、設定(calendar-setup.js)、多國語言(calendar-big5-utf8.js)、外觀(calendar-system.css)分離。
  5. 各外觀在index.html中選看,有水紋(aqua、須圖檔)、冬天、夏天、藍系、綠系、win2K四系、標準等十種外觀。
  6. index.html本身就是極好的程式範例。
  7. 多國語言達43種,有簡中、繁中big5和繁中utf-8。
  8. 由於xoops的themes中設style.css為table寬100%,使jscalendar過寬,所以須在jscalendar的外觀CSS中設:.calendar {width:226;},使其寬度正常。
  9. 使用時叫用Calendar.setup函式,其中會以Calendar類別為模,生出cal物件。
  10. 設定參數:
     *    prop. name   | description
     *  -------------------------------------------------------------------------------------------------
     *   inputField    | input欄的id,放日期
     *   displayArea   | DIV或其他元素的ID,秀日期
     *   button        | button或其他元素的ID,觸發行事曆函式
     *   eventName     | 觸發行事曆函式的事件名,不含 "on" 前置字, (預設: "click")
     *   ifFormat      | 要存入input欄的日期格式
     *   daFormat      | 要秀在displayArea的日期格式
     *   singleClick   | (true/false) 是否用單擊模式 (預設: true)
     *   firstDay      | 數值: 0 到 6.  "0" 代表週日為首行, "1" 代表週一為首行,餘類推
     *   align         | 對齊設定 (預設: "Br",)
     *   range         | 兩元素之起屹。預設可用範圍: [1900, 2999]
     *   weekNumbers   | (true/false) 若真(預設)秀星期幾
     *   flat          | null 或元素ID;非null則日曆以平板秀在ID處
     *   flatCallback  | 在平板日曆下,收到JS日期物件並送回URL給瀏覽器跳過的函式。
     *   disableFunc   | 收到JS日期物件並當日期不可用時送回真的函式。
     *   onSelect      | 當日期被選用時要呼叫的函式。可不必給 (預設為"普通OK")
     *   onClose       | 當日曆關閉時要呼叫的函式。預設為null。
     *   onUpdate      | 當input欄中日期改動時要呼叫的函式。預設為null。
     *   date          | 日曆被初始化的日期。預設為null,代表以今天起始日曆。
     *   showsTime     | 預設: false;若真日曆會包含時間選擇器。
     *   timeFormat    | 時間格式;"12" 或 "24",預設為 "12"
     *   electric      | 若 true (預設) 當移動滑鼠於日期欄間,隨時變換日期;否則當日曆關閉時才變換日期
     *   step          | 設定當按住年份下拉盒子不放時,選項間隔為幾年;預設:2
     *   position      | 設定日曆的絕對位置;預設:null
     *   cache         | 若 "true" (預設:"false") 儘量使用相同的日曆物件
     *   showOthers    | 若 "true" (預設:"false") 秀前後相鄰月份的日期(但用淡色處理)
     日期格式參數:
    s["%a"] = Calendar._SDN[w];   // 多國語言之短名星期幾,如「日」 [FIXME: I18N]
    s["%A"] = Calendar._DN[w];    // 多國語言之全名星期幾,如「星期日」
    s["%b"] = Calendar._SMN[m];   // 多國語言之短月份名 [FIXME: I18N]
    s["%B"] = Calendar._MN[m];    // 多國語言之月份名,中文和上項相同
    // FIXME: %c : preferred date and time representation for the current locale
    s["%C"] = 1 + Math.floor(y / 100);      // 世紀數
    s["%d"] = (d < 10) ? ("0" + d) : d;     // 該月第幾天 (range 01 to 31)
    s["%e"] = d;                            // 該月第幾天 (range 1 to 31)
    // FIXME: %D : american date style: %m/%d/%y
    // FIXME: %E, %F, %G, %g, %h (man strftime)
    s["%H"] = (hr < 10) ? ("0" + hr) : hr;  // 小時, range 00 to 23 (24h format)
    s["%I"] = (ir < 10) ? ("0" + ir) : ir;  // 小時, range 01 to 12 (12h format)
    s["%j"] = (dy < 100) ? ((dy < 10) ? ("00" + dy) : ("0" + dy)) : dy; // 該年第幾天 (range 001 to 366)
    s["%k"] = hr;                 // 小時, range 0 to 23 (24h format)
    s["%l"] = ir;                 // 小時, range 1 to 12 (12h format)
    s["%m"] = (m < 9) ? ("0" + (1+m)):(1+m);// 月, range 01 to 12
    s["%M"] = (min < 10) ? ("0" + min):min; // 分, range 00 to 59
    s["%n"] = "\n";               // a newline character
    s["%p"] = pm ? "PM" : "AM";
    s["%P"] = pm ? "pm" : "am";
    // FIXME: %r : the time in am/pm notation %I:%M:%S %p
    // FIXME: %R : the time in 24-hour notation %H:%M
    s["%s"] = Math.floor(this.getTime()/1000);// 時間戳記,gettime得到毫秒,除1000得秒
    s["%S"] = (sec < 10) ? ("0" + sec) : sec; // 秒, range 00 to 59
    s["%t"] = "\t";                         // a tab character
    // FIXME: %T : the time in 24-hour notation (%H:%M:%S)
    s["%U"] = s["%W"] = s["%V"] = (wn < 10) ? ("0" + wn) : wn; // 10以下補成兩位
    s["%u"] = w + 1;              // 本週的第幾天 (range 1 to 7, 1 = MON)
    s["%w"] = w;                  // 本週的第幾天 (range 0 to 6, 0 = SUN)
    // FIXME: %x : preferred date representation for the current locale without the time
    // FIXME: %X : preferred time representation for the current locale without the date
    s["%y"] = (''+y).substr(2, 2);// 兩位數的年 (range 00 to 99)
    s["%Y"] = y;                  // 四位數的年
    s["%%"] = "%";                // a literal '%' character

phpmailer:

(一)安裝校調說明:

  1. 將 class/mail/phpmailer/class.phpmailer.php中
    var $CharSet = "iso-8859-1";改為var $CharSet = 'UTF-8';

(二)使用:

require("../phpmailer/class.phpmailer.php");                 // 載入類別定義
$mail = new PHPMailer();                                     // 依類別產生物件$mail

$mail->IsSMTP();                                             // 使用 SMTP servers 寄信
$mail->Host = "atl.mail.cbeyond.com";                        // 指出 SMTP servers
$mail->SMTPAuth = true;                                      // 打開 SMTP 認證  ┐ 多數情形下SMTP
$mail->Username = "jyu@aemtechnology.com";                   // SMTP 帳號       ┤ 轉信不必認證
$mail->Password = "12345";                                   // SMTP 密碼       ┘ 此三行可不寫
$mail->From = "jimiyu@gmail.com";                            // 寄件者郵址
$mail->FromName = "呆呆吉米魚@Gmail";                        // 寄件者名稱
$mail->AddAddress("jimiyu@seed.net.tw","吉米魚@SeedNet");    // 加一位收件者
$mail->AddAddress("jimiyu@gmail.com");                       // 加一位收件者,不加姓名
$mail->AddReplyTo("jyu@aemtechnology.com","AEM");            // 加一位回函地址
$mail->WordWrap = 50;                                        // 多少字才折行
$mail->AddAttachment("d:/index.php");                        // 加一個附檔
$mail->AddAttachment("d:/", "AUTORUN.INF");                  // 加一個附檔
$mail->IsHTML(true);                                         // 是否以 HTML 格式做信
$mail->Subject = "測試mail";                                 // 主旨
$mail->Body = "This is the <b>HTML body</b>";                // 信的內容
$mail->AltBody = "This is the text-only body";               // 信的內容純文字交替格式段落
if(!$mail->Send()){                                          // 寄信,如果失敗
   echo "Message was not sent <p>";                          // 信沒寄
   echo "Mailer Error: " . $mail->ErrorInfo;                 // 列出錯誤原因
   exit;                                                     // 跳出程式
}
echo "Message has been sent";                                // 信已經寄了

database:

(一)諸class:

                                              ┌───────────┐
                                            ┌┤XoopsMySQLDatabaseSafe├─┐
┌───────┐  ┌─────────┐  │└───────────┘  │┌──────────┐┌────┐
│XoopsDatabase │->│XoopsMySQLDatabase│->│ 用queryF()丟回去           ││XoopsDatabaseFactory││Database│
└───────┘  └─────────┘  │┌────────────┐│└──────────┘└────┘
 設日誌,前置字       各種資料操作           └┤XoopsMySQLDatabaseProxy ├┘ 實體化物件,連結        實體化
                     queryF():加limit段       └────────────┘
                         寫入logger物件        select用queryF()丟回去
                                              以外的指令,用xoopsSecurity檢查
┌─────┐┌splitMySqlFile()
│SqlUtility├┤拆成一道道命令放入陣列
└─────┘└prefixQuery()
                對INSERT,UPDATE,CREATE,ALTER命令下的資料表名稱加前置字串
\class\database\database.php(53):       class XoopsDatabase
                                              setLogger()          設日誌物件,預計導向 XoopsLogger 類別(在\class\logger.php中)
                                              setPrefix()          設前置字
                                              prefix($tablename)   在表名前加前置字
\class\database\database.php(123):      class Database
                                              &getInstance()       傳回XoopsDatabaseFactory::getDatabaseConnection()
\class\database\mysqldatabase.php(58):  class XoopsMySQLDatabase extends XoopsDatabase
                                              connect()            連結資料庫
                                              genId(               return 0;
                                              fetchRow()           劈一筆           mysql_fetch_row()
                                              fetchArray()         劈一筆           mysql_fetch_assoc()
                                              fetchBoth()          劈一筆           mysql_fetch_array(,MYSQL_BOTH)
                                              getInsertId()        產生插入id並回傳 mysql_insert_id($this->conn);
                                              getRowsNum()         傳回筆數         mysql_num_rows()
                                              getAffectedRows()    傳回受影響列數   mysql_affected_rows($this->conn)
                                              close()              歸回連結         mysql_close($this->conn)
                                              freeRecordSet()      釋放結果集合     mysql_free_result()
                                              error()              傳回錯誤訊息     mysql_error
                                              errno()              傳回錯誤代碼     mysql_errno
                                              quoteString($str)    字串加反斜,找到\\"換成",然後整個字串前後加'。
                                              queryF(命令,行數=0,起點=0) 補上limit段,將執行寫入logger物件,有行數,起點為0則執行從頭顯示
                                              query()              什麼事都不做
                                              queryFromFile($file) 將sql檔讀取,用SqlUtility::splitMySqlFile拆成陣列,用SqlUtility::prefixQuery在表前加前置字串,用本物件query()方法執行
                                              getFieldName()       取回欄名         mysql_field_name()
                                              getFieldType()       取回欄型         mysql_field_type()
                                              getFieldsNum()       取回欄數         mysql_num_fields(
\class\database\mysqldatabase.php(347): class XoopsMySQLDatabaseSafe extends XoopsMySQLDatabase
                                              query()        繼承父類別後原封不動把查詢丟回去
\class\database\mysqldatabase.php(378): class XoopsMySQLDatabaseProxy extends XoopsMySQLDatabase
                                              query()        如果是select用queryF()丟回去,如果是select以外的指令,用xoopsSecurity檢查
\class\database\databasefactory.php(2): class XoopsDatabaseFactory
                                              XoopsDatabaseFactory()   無敘述,供實體化時用
                                              &getDatabaseConnection() 依XoopsMySQLDatabaseSafe或XoopsMySQLDatabaseProxy實體化物件,進行連結,並傳回
                                              &getDatabase()           依XoopsMySQLDatabaseSafe或XoopsMySQLDatabaseProxy實體化物件,並傳回
\class\database\sqlutility.php(21):     class SqlUtility
                                              splitMySqlFile() 過濾sql命令中的註解,並拆成一道道命令放入陣列。
                                              prefixQuery()    對INSERT、UPDATE、CREATE、ALTER命令下的資料表名稱加前置字串

etable:

(一)繼承來的方法:繼承自XoopsMySQLDatabaseProxy

  1. *query(命令,行數,起點) :sql命令查詢,如果是select用queryF()丟回去,如果是select以外的指令,用xoopsSecurity檢查
  2. connect :連結資料庫
  3. genId :丟回0,以產生新一套id
  4. fetchrow :劈一筆 mysql_fetch_row()
  5. fetcharray :劈一筆 mysql_fetch_assoc()
  6. fetchboth :劈一筆 mysql_fetch_array(,MYSQL_BOTH)
  7. getinsertid :產生插入id並回傳 mysql_insert_id($this->conn);
  8. getrowsnum :傳回筆數 mysql_num_rows()
  9. getaffectedrows :傳回受影響列數 mysql_affected_rows($this->conn)
  10. close :歸回連結 mysql_close($this->conn)
  11. freerecordset :釋放結果集合 mysql_free_result()
  12. error :傳回錯誤訊息 mysql_error
  13. errno :傳回錯誤代碼 mysql_errno
  14. quotestring :字串加反斜,找到\\"換成",然後整個字串前後加'。
  15. *queryf(命令,行數,起點) :補上limit段,將執行寫入logger物件
  16. queryfromfile :將sql檔讀取,用SqlUtility::splitMySqlFile拆成陣列,用SqlUtility::prefixQuery在表前加前置字串,用本物件query()方法執行
  17. getfieldname :取回欄名 mysql_field_name()
  18. getfieldtype :取回欄型 mysql_field_type()
  19. getfieldsnum :取回欄數 mysql_num_fields()
  20. xoopsdatabase :待定義
  21. setlogger :設日誌物件,預計導向 XoopsLogger 類別(在\class\logger.php中)
  22. *setprefix :設前置字
  23. *prefix :在表名前加前置字
  24. xoopsmysqldatabase :物件名
  25. xoopsmysqldatabaseproxy:物件名

(二)新增的屬性:

通道傳遞屬性

  1. $loop :sql來自於兩通道。值:1
  2. $action :目前的處理方式。
  3. $tables :諸資料表。
  4. $perpage0 :設定每頁顯示幾筆
  5. $perpage :目前每頁顯示幾筆
  6. $start :顯示起點
  7. $sql_query :現用查詢
  8. $rid :要找到某一筆資料

方法共用屬性

  1. $rownum :查詢指令諸筆數
  2. $fields :查詢指令諸選用欄名
  3. $tbl :查詢指令結果多維陣列,$tbl[0]是值二維陣列,$tbl[1]是諸選用欄,每欄一元素,欄名索引。$tbl[1]['欄名']['colname'或'collen'或'coltype'或'colflag'或'colalias'或''或''],$tbl[2]是某筆編輯選單
  4. $allfields :諸資料表全部欄位資料

(三)新增的方法:

  1. list1(sql命令,編輯狀態,每頁幾筆,欄名代稱):接受命令秀表。「編輯狀態」專供disp_table用。
  2. etable():實體化。設日誌、前置字並連結。
  3. decode(字串):用urldecode解碼後,再將+換回空白。
  4. uppage():向前翻頁,調start及perpage屬性。
  5. allpage():全部顯示,調perpage屬性。
  6. downpage():向後翻頁,調start及perpage屬性。
  7. erase(表格名,$rid):刪一筆。
  8. edited(表格名,$rid):用$_POST['f']的資料,更新$rid所指的那一筆。
  9. ins_ed(表格名):用$_POST['f']的資料,新增一筆。
  10. ins(表格名):叫addElements()。
  11. queryET(sql命令,每頁幾筆,開始筆數):拆出sql諸段,諸表放進tables屬性(陣列),用queryF出去。
  12. mk_tbl(結果id,欄名代稱,欲編的rid,是否編):
    1. 設rownum屬性(筆數)。
    2. 取諸欄屬性(含欄名代稱),並設為tbl[1]。
    3. 造每一筆的欄值元素及rid),如果rid恰為欲編筆之rid:addElements('edited',$row,trim($rid))得出表單,並放tbl[2]
    4. tbl[0]為欄值二維陣列。
  13. addElements(插或編,某筆之諸欄值,欲編筆之rid):產生表單。
  14. disp_table(編輯狀態):以表格方式秀。翻頁0,1,插筆0,2,編刪0,4。
  15. cuts(開始字串,結束字串,欲擷取字串):從欲擷取字串中,開始字串到結束字串所包夾的段落做成陣列。

(四)問題與限制:

  1. 尚未解決一php多物件時,不同物件如何共用POST通道及REQUEST通道。所以最多加一個編輯狀態,每頁幾筆均為0的物件,使其不使用通道。
  2. 尚未解決多表問題。
  3. 表單加入選項未完全處理。

拾、smarty 介紹

一、原理:

  1. Smarty 在解析程式檔與樣版檔後,會將這兩個檔案再編譯為一個php 檔案。
  2. 當使用者瀏覽網頁時,PHP直接解譯編譯過的PHP檔案,以加快速度。
  3. 當程式碼或樣版檔有改變時,Smarty 會自動再編譯一次,不須手動重新編譯。
  4. smarty 提供兩種讀取樣版檔的方法,一為直接從檔案讀取,另外一種則將樣板檔存入資料庫中,再由資料庫讀取。
  5. xoops 採用後者,因此每當樣版有改變時,必須由管理員選單/模組安裝處重新載入樣板,才會更新資料庫,取得新的樣版。

二、變數、函式、算符:

  1. xoops中前後加角括號。
  2. {$smarty.陣列.字串索引}:叫陣列中的元素值
  3. {$smarty.const.XOOPS_URL}:叫XOOPS_URL的常數
  4. {$smarty.server.PHP_SELF}:來自server變數,變數名叫PHP_SELF的變數值,即載入樣版之php。
  5. {$smarty.get.page}:來自get通道,變數名叫page的變數值
  6. {$smarty.post.page}:來自post通道,變數名叫page的變數值
  7. {$smarty.cookies.username}:來自cookies通道,變數名叫username的變數值
  8. {$smarty.env.PATH}:來自環境變數,變數名叫PATH的變數值。
  9. {$smarty.request.username}:來自混合自get/post/cookies/server/env,變數名叫username的變數值。
  10. {$smarty.session.id}:來自session變數,變數名叫id的變數值。
  11. {$commentsnav}
  12. {$lang_notice}
  13. {html_options output=一維陣列 values=一維陣列 options=一維陣列 selected=值}:產生select中的諸option
    1. output,values成對,元素數相同,前者管顯示,後者管值。
    2. options代替output,values,元素的key管選項值,元素值管選項顯示。
    3. selected管預選值,其值若在諸選項值中則預選。
  14. {html_radios name=元件名 options=一維陣列 selected=值 separator=字串}:產生input的諸radio
    1. options,元素的key管選項值,元素值管選項顯示。
    2. selected管預選值,其值若在諸選項值中則預選。
    3. 諸選項間用separator隔開
  15. {html_checkboxes name=元件名 options=一維陣列 selected=值 separator=字串}:產生input的諸checkbox,參數值同上
  16. {html_select_date prefix=元件名前置字 field_array=元件名陣列 time=選單預設日期 start_year="-往前幾年" end_year="+往後幾年" display_days=true或false field_order="YMD" field_separator="選單間隔字串" month_format="%m月"}
    1. 預設三組select元件名為Year、Month、Day,預設元件名前置字為Date_,所以如省略prefix,三元件名為Date_Year、Date_Month、Date_Day。
    2. 可將元件名變成一陣列之元素,陣列名由field_array指定,例如field_array=bir,三元件名變為bir[Year]、bir[Month]、bir[Day]。
    3. time為選單預設日期,使用YYYY-MM-DD格式,預設為今天。
    4. start_year、end_year,決定年度選項範圍。
    5. display_days決定要不要顯示日期。
    6. field_order決定三個select選單的順序,預設為MDY。
    7. field_separator為選單間隔字串。
    8. month_format為月份格式,%m(01-12)為十進位數字,%B為英文全稱,%b為英文縮寫。預設為%B。
    9. month_value_format為月份值格式,%m為十進位數字,%B為英文全稱,%b為英文縮寫。預設為%m。
    10. day_format為日期格式,%d(01-31),%e(1-31)。預設為%02d。
    11. day_value_format為日期值格式,%d(01-31),%e(1-31)。預設為%e。
  17. {html_table loop=一維陣列 cols=欄數 table_attr=表格屬性 tr_attr=列屬性}:產生簡易表格
    1. loop,放各td中要擺的值。
    2. 在省略欄數時,自動取總格數的平方根以決定欄數。
  18. {if 條件}…{elseif 條件}…{/if}:合條件才秀…。
  19. {foreach from=n維陣列 item=data}…{/foreach}:…中的$data為n維陣列的元素,為n-1維陣列,且每一個元素執行一迴圈。
  20. {foreach from=一維陣列 item=data}…{/foreach}:…中的$data為一維陣列中每一個元素。
  21. {foreach from=首維為註標索引次維為字串索引的二維陣列 item=data}…{/foreach}:…中的$data為一維陣列;「$data.字串索引」為一維陣列中的每一個元素。
  22. {include file="db:檔名"}
  23. {cycle values="值一,值二"}:諸值交替

三、使用方法:

必有兩個程式,其中之一為php:

四、修改函式:

(一)讓option可以用disabled屬性:

  1. 改class/smarty/plugins/function.html_options.php
  2. 參數型別轉換加
                case 'disabled':
                    $$_key = array_map('strval', array_values((array)$_val));
                    break;
  3. 三處呼叫smarty_function_html_options_optoutput參數加 $disabled
  4. function smarty_function_html_options_optoutput定義加參數 $disabled,其內加
            if (in_array((string)$key, $disabled))
                $_html_result .= ' disabled';

拾壹、工具

一、轉碼:12-34頁

拾貳、改xoops

一、以戰國策edu-2為例

  1. 建資料庫及帳號,用戰國策資料庫管理介面。
  2. 用phpMyAdmin將資料庫校對方式設為utf8_general_ci,MySQL校對方式設為utf8_general_ci。
  3. 將\class\database\mysqldatabase.php 中 queryF 方法內「$result = mysql_query($sql, $this->conn);」或 connect 方法內「return true;」前加「@mysql_query("set names utf8");」。後者為快,前者保險。
  4. 用install或載入sql(無指定校對方式)建立36張基本table。
  5. 刪除tplfile中第33號樣板。並檢查所有資料表否密實。
  6. 建「保固說帖」自訂區塊。
  7. 改theme,將66行./themes/imago08/images/module.jpg註解掉。
  8. 改theme,頁尾註腳,計數器。
  9. 改/modules/system/templates/system_redirect.html及tplsource表中6號樣版:<h4>改為<h5>。
    改/themes/imago08/style.css(IE用)及/themes/imago08/styleNN.css(Firefox用) 加「h5 {font-size:18px;}」。
  10. 改/themes/imago08/style.css及/themes/imago08/styleNN.css 註解掉li的list-type。
  11. 在/xoops.css中加丁丁自訂的段落。
  12. 「偏好設定/使用者管理/一般設定」暫設不可註冊。取消顯示「登入區塊」、主選單區塊。
  13. 戰國策沒有裝mb_subcut
  14. 裝commbook,換knsh八表。
  15. 裝檔案上傳,改uploader/include/conf.php:
    • $homeurl
    • $installurl
    • $uploads_path 上傳路徑
    • $url_path
    • $maxalowedfilesize=10240;最大10M
    • $datetimeformat="Y-m-d H:i";
    • 改上傳資料夾屬性為 777
  16. 裝piCal:
    • 換資料表。
    • 換模組檔案。
    • 抑制class/piCal.php的2138-2140行,使其不做產編計工。
    • 上傳print_sm.php。設其中的「$mail->Host = 127.0.0.1」。戰國策的郵件伺服器架在本機上ip:202.133.244.13 dn:p1.coowo.com,但設ip或dn皆不轉信,因其只接受本機的轉信功能。
    • 將 class/mail/phpmailer/class.phpmailer.php 中 var $CharSet = "iso-8859-1"; 改為 var $CharSet = 'UTF-8';
    • 更換common.php
  17. CBB論壇3.04版會取消http header中「Content-Type: text/html; charset=UTF-8」,使theme.html中的「meta http-equiv="Content-Type" content="text/html; charset=...」生效,而imago08的theme.html的charset設為gb2312,所以會使CBB論壇變成以gb解碼。所以須改imago08的theme.html,設「charset=<{$xoops_charset}>」。
  18. CBB論壇3.04:
    • 刪除 /Frameworks/xoops22/後,上傳 Frameworks 到 XOOPS根目錄。
    • newbb複製到/modules。
    • 安裝。(不要反安裝,容易把主選單樣板搞掉)
    • 「模組/CBB論壇/管理員首頁」中讓「附件路徑: /var/www/vhosts/edu-2.org/httpdocs/tmp/uploads/newbb/ ( 有效 )」「附件縮圖路徑: /var/www/vhosts/edu-2.org/httpdocs/tmp/uploads/newbb/thumbs/ ( 有效 )」
    • 將/modules/newbb/include/functions.php的186行setcookie()註解掉,因為不會成功。
    • 新增分類及討論區
    • 針對討論區進行討論權限設定。你必須逐一去設定誰可以訪問、誰可以瀏覽、誰可以發表........很不方便。所以一般都是設定一個「權限範本」方便日後直接可以套用。
    • 建立私密的討論區:如果我們的討論區不希望別人看到,那可以設定討論區後,讓其他「群組」不能訪問就可了。
    • 論壇要用HTML,必須論壇設允許HTML,文章也設允許HTML。
    • 不論有沒有啟用本模組區塊,則「模組/CBB論壇/區塊設定」均不能用。
  19. eguide/header.php的第39行多餘,應註解掉
  20. istats:cache設可寫入,footer.php加統計動作script。
  21. 加xcgal:2.03版
  22. 將etable.php放入/class/database中;將sql.php放入xoops中。
  23. 加xoops_pical_todo資料表。

諸模組

piCal行事曆模組:

(一)資料表欄位說明:結構從0.8-0.87皆同

  1. xoops_pical_cat:類別
    • cid :類別代碼
    • pid :父物件的cid,00000代表第一層物件
    • weight :排序
    • exportable :
    • autocreated:
    • ismenuitem :是否顯示子目錄選項
    • enabled :有效
    • cat_title :類別名稱
    • cat_desc :說明
    • dtstamp :最後修正時間
    • cat_extkey0:
    • cat_depth :分類階層,1代表第一層,2代表第二層,3代表第三層
    • cat_style :
  2. xoops_pical_event:事件
    • id :事件編號
    • uid :發表者id
    • groupid :公開於何群組。0代表公開事件。
    • summary :行程摘要
    • location :地點
    • organizer :(可能是主事者,不確定)
    • sequence :修改次數
    • contact :相關人員
    • tzid :時區系統代碼,預設為「GMT」
    • description:行程內容描述
    • dtstamp :修正日期,年月日時分秒,共14位。
    • categories :專案類別(複選),類別代碼五位加逗點共六位。255/6,最多放42類。
    • transp :1。事件可不可以有空再找。icalendar的VEVENT性質之一。
    • priority :0。優先性,0-9,0代表未定義,1優先性最高,9最低。icalendar的VEVENT和VTODO性質之一。
    • admission :0待審,1已審。
    • class :公開類別,PUBLIC或PRIVATE,PRIVATE為不公開,搭配groupid公開於某一群組。
    • rrule :重複條件,無則空白
    • rrule_pid :重複條件編碼
    • unique_id :重複條件編碼
    • allday :全天事件,和始末時分指定互斥。0(。。。):非全天;1(•。。):全天非條狀非周年;3(••。):全天條狀;5(•。•):全天周年。非全天而選條狀或周年不生效。
    • start :事件開始時間+28800(距1970-1-1之秒數),減8小時(28800秒),送入date(),可得開始時間。因為xoops預設時區為台灣時區GMT加8小時。
    • end :事件結束時間+28800(距1970-1-1之秒數),減8小時(28800秒),送入date(),可得結束時間。因為xoops預設時區為台灣時區GMT加8小時。
    • start_date :NULL
    • end_date :NULL
    • cid :
    • comments :
    • event_tz :時件所用的時區。
    • server_tz :伺服器所在時區。
    • poster_tz :張貼者所在時區。預設為0
    • extkey0 :
    • extkey1 :
  3. xoops_tplsource:筆數和xoops_tplfilexoops_tplfile相同
    • tpl_id :代碼
    • tpl_source:帶smarty的html碼。抄自樣版檔。
  4. xoops_group_permission:群組權限。見基本資料表。
    • 類別的瀏覽權限
           gperm_id     :流水號
           gperm_groupid:群組代碼
           gperm_itemid :類別代碼
           gperm_modid  :模組代碼
           gperm_name   :pical_cat
  5. xoops_pical_plugins:插件
    • pi_id :
    • pi_title :
    • pi_type :
    • pi_dirname :
    • pi_file :
    • pi_dotgif :
    • pi_options :
    • pi_enabled :
    • pi_weight :
    • last_modified:

(二)管理介面:

  1. 群組區塊管理:網站管理者才能設,模組管理員不能設。
    1. 各群組對「使用」與「管理」權限的指定。
    2. 各群組對八區塊使用權。以及區塊位置。
  2. 偏好設定:網站管理者才能設,模組管理員不能設。

    1. 用戶(會員)權限:
      • 全部不能新增事件。
      • 全部可以新增事件要審核
      • 全部可以新增事件免審核。
      • 依群組權限設定,選此項後才能使「群組權限管理」生效。
    2. 訪客權限:
      • 全部不能新增事件。
      • 全部可以新增事件要審核
      • 全部可以新增事件免審核。
    3. 可否匯出 ics 檔案的權限。
  3. 群組權限管理:管理各群組5個「使用權限」,新增事件(免審、要審)、編輯事件(免免審、要審)、刪除事件。
  4. 類別瀏覽管理:管理各群組對各類別(專案),有無瀏覽權限。
  5. 類別管理:建立各種事件類別,專案有多層結構。
    1. 新增類別。
    2. 刪除類別。
    3. 插入事件。
    4. 決定排序。
    5. 決定是否有效。
  6. 事件管理:

    1. 選出事件。
      • 以未來、過去、所有選出事件。
      • 以專案(類別)選出事件。
      • 蒐尋事件主題及說明的字串。
    2. 新增事件(鉛筆)、觀看及編輯事件(點主題)、刪除事件。
    3. 匯出事件。
    4. 移動或複製事件到另一個類別(專案)。

(三)使用介面:

  1. 年曆:
    1. 顯示全年各月、各日。
    2. 選類別(專案),在相關的日子畫底線。
    3. 點日子,出月曆。
  2. 月曆(預設):
    1. 顯示一個月、各日。
    2. 選類別(專案),在相關的日子出事件主題。
    3. 點鉛筆新增事件。
    4. 點事件主題,看、編、刪該事件。
  3. 日曆:
  4. 顯示一天諸事件。
  5. 選類別(專案),在印事件主題、說明。
  6. 點鉛筆新增事件。
  7. 點事件主題,看、編、刪該事件。
  8. 事件瀏覽、編、刪:
    1. 選類別(專案),及「某日」之前、之主題。
    2. 新增類別。
    3. 刪除類別。
    4. 插入事件。
    5. 決定排序。
    6. 決定是否有效。

(四)程式說明:(0.88a)

  1. 註解編碼是EUC-JP,先翻成utf-8,再翻成繁中。
  2. 新增事件進入點在index.php?cid=類碼&smode=Monthy&action=Edit&caldate=2005-8-10
  3. 類別定義piCal.php的結構
    定資料表名稱為常數
    
    定義類別 piCal
      放各語言字彙諸陣列
      地區
      顏色預設值
      時區預設值
      編輯者初值
        可插入事件
        可編輯事件
        可刪除事件
        $user_id = -1
        非管理員
        其他
     第幾列  各函式
     (108):  建置資料者                                                     function piCal( $target_date = "" , $language = "japanese" , $reload = false )
     (183):  讀取場所設定                                                   function read_locale()
    *(192):  設定年月日秒八屬性                                             function set_date( $setdate )
     (223):  從星期•節日的種類得背景顏色•文字顏色                         function daytype_to_colors( $daytype )
     (245):  從SQL形式的日期,尋求星期•節日的種類的級函數                  function get_daytype( $date )
     (274):  還this-caldate日的>預定                                        function get_date_schedule( $get_target = '' )
     (344):  還this-caldate以後的>預定 最大$num 事                          function get_coming_schedule( $get_target = '' , $num = 5 )
     (425):  mini日曆用活動取得函數                                         function get_flags_date_has_events( $range_start_s , $range_end_s )
     (496):  還mini日曆表示用字串                                           function get_mini_calendar_html( $get_target = '' , $query_string = '' , $mode = '' )
     (670):  年間日曆全體的表示(patTemplate使用)                           function get_yearly( $get_target = '' , $query_string = '' , $for_print = false )
     (723):  月日曆全體的表示(patTemplate使用)                             function get_monthly( $get_target = '' , $query_string = '' , $for_print = false )
     (788):  週日曆全體的表示(patTemplate使用)                             function get_weekly( $get_target = '' , $query_string = '' , $for_print = false )
     (831):  一日日曆全體的表示(patTemplate使用)                           function get_daily( $get_target = '' , $query_string = '' , $for_print = false )
     (874):  把必要的資訊用聯想排列送回日曆的header部等(月•周•1日共通)    function get_calendar_information( $mode = 'M' )
     (981):  還日曆的實體(1個月分)                                          function get_monthly_html( $get_target = '' , $query_string = '' )
     (1212): 還日曆的實體(1週分)                                            function get_weekly_html( )
     (1484): 還日曆的實體(1日分)                                            function get_daily_html( )
    *(1647): 觀看事件                                                       function get_schedule_view_html( $for_print = false )
    *(1893): 編輯事件                                                       function get_schedule_edit_html( )
    *(2191): 更新事件                                                       function update_schedule( $set_sql_append = '' , $whr_sql_append = '' , $notify_callback = null )
     (2337): 日程的要是刪掉(RRULE附著從父母全部)                            function delete_schedule( $whr_sql_append = '' , $eval_after = null )
     (2375): 日程的一件事刪掉(RRULE的孩子唱片)                              function delete_schedule_one( $whr_sql_append = '' )
     (2396): 使改方向                                                       function redirect( $query )
     (2425): 受到到-12.0∼12.0為止的價值,還所說的(GMT+HH:MM)的字串         function get_tz_for_display( $offset )
    *(2432): 時區選單                                                       function get_tz_options( $selected = 0 )
     (2450): 受到到-12.0∼12.0為止的價值,還整隊(TZOFFSET,TZID)             function get_timezone_desc( $tz )
     (2469): 每形式作成範疇選擇文字箱                                       function get_categories_selform( $get_target = '' , $smode = null )
    *(2497): 由年月日轉時間戳記                                             function parse_posted_date( $date_desc , $default_unixtime )
     (2528): 受到時區排列,還RFC2445VTIMEZONE用字串                         function get_vtimezones_str( $timezones )
    *(2568): 生成set字串                                                    function get_sql_set( $cols )
     (2628): 從unix時間標記,得以現在的語言被表現了的長的記載的YMDN         function get_long_ymdn( $time )
     (2642): 從unix時間標記,得以現在的語言被表現了的標準長記載的MD         function get_middle_md( $time )
     (2654): 從unix時間標記,得以現在的語言被表現了的 DHI                   function get_middle_dhi( $time , $is_over24 = false )
     (2671): 從unix時間標記,得以現在的語言被表現了的 HI                    function get_middle_hi( $time , $is_over24 = false )
     (2687): 為選時間(hour)作選單                                           function get_options_for_hour( $default_hour = 0 )
     (2701): 從unix時間標記,得有的時間)以後的預定日期和時間的字串          function get_coming_time_description( $start , $now , $admission = true )
     (2728): 從2個unix時間標記,得到日的預定時間的字串(已是垃圾)            function get_todays_time_description( $start , $end , $ynj , $justify = true , $admission = true , $is_start_date = null , $is_end_date = null , $border_for_2400 = null )
     (2765): 只從詢問事件結果,得有的日的預定時間的字串(通常活動)           function get_time_desc_for_a_day( $event , $tzoffset , $border_for_2400 , $justify = true , $admission = true )
    *(2802): 日曆圖示選單                                                   function get_formtextdateselect( $name , $value )
     (2810): $this-images_url下>有的style.讀入css,sanitaizu做交給          function get_embed_css( )
     (2820): 還投稿者的表示字串的 (Override對像)                            function get_submitter_info( $uid )
     (2828): 生成範疇關係的WHERE用條件                                      function get_where_about_categories()
     (2862): 生成CLASS(公開•非公開)關係的WHERE用條件                       function get_where_about_class()
    *(2886): 日語不進行假名轉換                                             function mb_convert_kana( $str , $option )
    *(2902): 文字區塊過濾函式                                               function textarea_sanitizer_for_show( $data )
    *(2907): 文字過濾函式                                                   function text_sanitizer_for_show( $data )
    *(2912): 文字區塊過濾函式                                               function textarea_sanitizer_for_edit( $data )
    *(2917): 文字過濾函式                                                   function text_sanitizer_for_edit( $data )
     (2922):                                                                function textarea_sanitizer_for_export_ics( $data )
     (2934): 還在iCalendar形式的badge輸出平台選擇用形式-貼上指定            function output_ics_confirm( $post_target , $target = '_self' )
     (2968): 輸出只一件事場合得到['event_id']、排列的場合貼上['event_ids']  function output_ics( )
     (3133):                                                                function import_ics_via_fopen( $uri , $force_http = true , $user_uri = '' )
     (3171):                                                                function import_ics_via_upload( $userfile )
     (3201): 讀入1唱片後邊進行的處理(rrule的展開,類目的cid化等)            function update_record_after_import( $event_id )
     (3239): 把rrule自然地翻譯成語言的級函數                                function rrule_to_human_language( $rrule )
     (3322): 展開rrule成編輯用形式的級函數                                  function rrule_to_form( $rrule , $until_init )
    *(3491): 轉換傳入的重複選項                                             function rrule_from_post( $start , $allday_flag )
     (3591): 作為第一回(父母),展開RRULE數據庫反射被交付了的event_id        function rrule_extract( $event_id )
    類別定義結束
  4. 時區相依問題
    • 「管理員選單/偏好設定/系統/一般設定/伺服器主機時區」設8
    • 「管理員選單/偏好設定/系統/一般設定/預設時區」設8,使成員的預設時區為8
      user_profile表timezone_offset欄,記錄每位使用者的個人時區,應為8。
    • 「管理員選單/模組/piCal/時區維護」中可以設piCal時區,應為8。
    • pical_event表event_tz代表事件的時區,應為8。
    • pical_event表poster_tz代表貼事件者的個人時區,台灣應為8。
    • function get_schedule_edit_html把時區選擇註解掉(0.88版是piCal.php的2195-2198行,這樣新增事件時就不會出現選擇時區。
    • 做好以上各項function get_tz_options中if( $tz == $selected )就不用改成if( $tz == '0' )。
  5. function get_schedule_edit_html
    預設模式為Monthly
    「如為舊事件
        登入者非本人或管理者,設為不可編輯、不可刪除
        依各欄值設定表單元件
          詳細內容用文字區塊過濾函式,事件名、地點、相關人員用文字過濾函式,
          專案類別、公開於何群組、重覆規則、poster_tz照抄,
          公開與否跑判別式定三變數
          已審或待審判別後,選定字串
          依可編狀態生「變更」按鈕($update_button),生「儲存為」按鈕($insert_button),依可刪狀態生「刪除」按鈕($delete_button)
          時區選單用時區選單函式產生
        依全天選項之值定三個checkbox之值並計算開始、結束日時的表示值
      如為新事件
        檢查可插狀態
        設各表單元件初值」
    造開始日時表單,結束日時表單
    造專案類別選擇複選框
    造「詳細內容」的textarea。如在xoops中,加xoops編輯介面,如不是則使用單純的textarea。
    
    丁丁私製:製造和登入者同群組者選單,製造完成日期選單(仿開始日),製造計工單產編選單
    
    返回字串初設(加丁丁私製部分),返回字串加按扭,
    送回返回字串
  6. function update_schedule
    未傳回事件名,_POST放入「沒有主題」
    開始日期、結束時期轉為時間戳記秒
    全天事件依傳回的 allday_bits陣列元素值,算出 allday 的欄值
    造sql字串$set_sql_date含start、end、allday、start_date、end_date、server_tz六欄
    未傳回詳細說明的預處理
    將傳回的 cids陣列,轉換為 $_POST['categories']字串
    轉換傳入的重複選項
    $cols陣列放各欄及其過濾條件,含summary、location、contact、description、categories、class、groupid、poster_tz、event_tz 九欄
    生成$set_str,由上述九欄,加上時間六欄,再加上函式外額外指定欄
    舊事件 用 update
    新事件 用 insert
    

(五)修改模組 for 工作追蹤:

  1. 修改資料表:
    • finish_man:用選單填入;finish_date用日曆選單或手填,2005-8-10或*(同上)。
      在pical.sql中pical_event資料表中加兩欄: finish_man varchar(255) NOT NULL default '*', finish_date varchar(255) NOT NULL default '*',
  2. 觀看事件在class/piCal.php中的function get_schedule_view_html()。
     0.8     0.87
    [1647行][1647行]    function get_schedule_view_html( $for_print = false )
                        {
    
    [1822行][1814行]             $finish_man=$this->text_sanitizer_for_show( $event->finish_man);$finish_date=$this->text_sanitizer_for_show( $event->finish_date);
    
    [1910行][1889行]    }
  3. 編輯事件在class/piCal.php中的function get_schedule_edit_html()。
     0.8     0.87
    [1915行][1894行]    function get_schedule_edit_html( )
                        {
    
    [2116行][2089行]        // same group user (coding by jj) 製造和登入者同群組者選單
                            global $xoopsUser;
                            global $xoopsDB;
                            $uid_=$xoopsUser->getVar("uid");
                            $result = mysql_query("select groupid from xoops_groups_users_link where uid='$uid_'");
                            $row = mysql_fetch_array($result);
                            $gid="xoops_groups_users_link.groupid='".$row['groupid']."'";
                            while($row = mysql_fetch_array($result)){$gid=$gid." or xoops_groups_users_link.groupid='".$row['groupid']."'";}
                            $result = mysql_query("select uname from xoops_users,xoops_groups_users_link where ($gid) and xoops_users.uid=xoops_groups_users_link.uid group by uname");
                            $f_man="<select name='finish_man'>\n";
                            while($row = mysql_fetch_array($result)){
                               $f_man=$f_man."    <option value=".$row['uname'];
                               if ($row['uname']==$xoopsUser->getVar("uname")){$f_man=$f_man." selected";}
                               $f_man=$f_man.">".$row['uname']."<br>\n";
    [2130行][2103行]        }
    
    [2132行][2105行]        // finish_date (coding by jj) 製造完成日期選單
                            if(! empty($_GET['event_id'])){if ($event->finish_date !='' ){$finish_date=$this->text_sanitizer_for_show($event->finish_date);}else{$finish_date='*';}}else{$finish_date='*';}
    [2134行][2107行]        $textbox_finish_date = $this->get_formtextdateselect('finish_date',$finish_date,_PICAL_TH_FINISH_NOTE);
    
    [2139行][2112行]        // 編輯事件表單
    
    [2182行][2156行]            <tr>
                                        <td class='head'>"._PICAL_TH_FINISH_MAN."</td>
                                        <td class='even'>$f_man</td>
                                </tr>
                                <tr>
                                        <td class='head'>"._PICAL_TH_FINISH_DATE."</td>
                                        <td class='even'>$textbox_finish_date</td>
    [2189行][2163行]            </tr>
    
    [2239行][2213行]    }

    代表常數:_PICAL_TH_SUMMARY(事件名)、_PICAL_TH_TIMEZONE(時區)、_PICAL_TH_STARTDATETIME(開始日時)、_PICAL_MB_HOUR_SUF(時)、_PICAL_MB_MINUTE_SUF(分)、_PICAL_TH_ENDDATETIME(結束日時)、_PICAL_TH_ALLDAYOPTIONS(全天選項)、_PICAL_MB_ALLDAY_EVENT(全天事件)、_PICAL_MB_LONG_EVENT(長期事件)、_PICAL_MB_LONG_SPECIALDAY(周年紀念日、假日)、_PICAL_TH_LOCATION(相關場所)、_PICAL_TH_FINISH_MAN(負責人)、_PICAL_TH_FINISH_DATE(完成日期)、_PICAL_TH_CONTACT(相關人員)、_PICAL_TH_DESCRIPTION(詳細內容)、_PICAL_TH_CATEGORIES(專案類別)、_PICAL_TH_CLASS(是否公開)、_PICAL_MB_PUBLIC(公開)、_PICAL_MB_PRIVATE(不公開)、_PICAL_MB_PRIVATETARGET(公開於)、_PICAL_OPT_PRIVATEMYSELF(個人專屬)、_PICAL_TH_RRULE(重複選項)、_PICAL_TH_ADMISSIONSTATUS(狀態)、_PICAL_MB_EVENT_ADMITTED(已審核)、_PICAL_MB_EVENT_NEEDADMIT(審核中)、_PICAL_MB_EVENT_NOTREGISTER(尚未紀錄)、_PICAL_BTN_NEWINSERTED(新增)。
    0.87版2106行解說:if(! empty($_GET['event_id'])):如果是已存在事件,有事件id;if ($event->finish_date !='' ):事件完成日期不為空白,則用用文字過濾函式秀出完成日期;
  4. 資料表更新在class/piCal.php中的function update_schedule()。
     0.8     0.87
    [2243行][2209行]    function update_schedule( $set_sql_append = '' , $whr_sql_append = '' , $notify_callback = null )
                        {
    
    [2326行][2293行]             $cols = array( "summary" => "255:J:1" , "location" => "255:J:0" , "finish_man" => "255:J:0" , "finish_date" => "255:J:0" , "contact" => "255:J:0" , "description" => "A:J:0" , "categories" => "255:E:0" , "class" => "255:E:0" , "groupid" => "I:N:0" , "poster_tz" => "F:N:0" , "event_tz" => "F:N:0" ) ;
    
    [2379行][2350行]    }

    $cols陣列中加入finish_man、finish_date。
    $cols陣列諸元素:summary(事件名)、location(場所)、finish_man(負責人)、finish_date(完成日期)、contact(相關人員)、description(詳細內容)、categories(專案類別)、class(公開類別)、groupid(公開於何群組)、poster_tz(?預設為0)、event_tz(時區)。
  5. 製造時區選項class/piCal.php中的function get_tz_options() 。
     0.8     0.87
    [    行][2640行]    function get_tz_options( $selected = '0' )
    
    [    行][2469行]     將if( $tz == $selected )改成if( $tz == '0' ),因xoops 2.2.3、2.2.4,無法將 $selected 變數值傳入函式定義內,使預設0時區無法work。
    
    [    行][2474行]    }
  6. 改模組language中pical_constants.php,_PICAL_TH_CATEGORIES(專案類別)、_PICAL_TH_CLASS(是否公開);加_PICAL_TH_FINISH_MAN(負責人)、_PICAL_TH_FINISH_DATE(完成日期)、_PICAL_TH_FINISH_NOTE(*代表不列管,-代表列管中尚未完成,日期代表已完成。)。
  7. 註解編碼是EUC-JP,先翻成utf-8,再翻成繁中。

(六)修改模組 for 記工單:

  1. 修改資料表:
    • 以站長的身份,用使用者管理在user_profile中增加knsh_id代表員工編號,knsh_gid代表組別。
    • 造xoops_knsh_product表,含 cat_name、product_id、product_name、use_081、use_082、use_083六欄,並匯入產編
    • 改pical_event,增product_id,add_start(加班開始),add_start(加班結束)三欄。
  2. 觀看事件在class/piCal.php中的function get_schedule_view_html()。
     0.87
    [1647行]    function get_schedule_view_html( $for_print = false )
                {
    
    [1814行]             $finish_man=$this->text_sanitizer_for_show( $event->finish_man);$finish_date=$this->text_sanitizer_for_show( $event->finish_date);
    
    [1889行]    }
  3. 編輯事件在class/piCal.php中的function get_schedule_edit_html()。加產品選單、加班開始日時、結束日時
     0.87
    [1894行]    function get_schedule_edit_html( )
                {
    
    
    [2112行]        // 編輯事件表單
    
    
    [2213行]    }

(七)修改模組 for 會議記錄:

在class/piCal.php中function get_schedule_view_html內,加上
        if (strstr($event->description,"<") && strstr($event->description,">")){$description =  $event->description ;}
        else{$description = $this->textarea_sanitizer_for_show( $event->description ) ;}

(八)修改模組 for 「類別的瀏覽權限」:

  1. admin/cat2groupperm.php中xoops_cp_header();及xoops_cp_footer();所包的範圍:
    include( './mymenu.php' ) ;負責秀出piCal後台管理從「待審事件區」到「偏好設定」等11項選單,一直到<hr style='clear:left;display:block;' />為止。
    echo $form->render() ;負責秀出群組與類別配對表;$form由 MyXoopsGroupPermForm 類別來(在mygrouppermform.php中),其中render()方法會傳回群組類別的配對表。
  2. mygroupperm.php為群組前置處理為「類別的瀏覽權限」(cat2groupperm.php)「群組權限管理」(groupperm.php)「區塊與群組管理」(myblocksadmin.php)所共用。
  3. 先改cat2groupperm.php中三處:
    if( ! empty( $_POST['submit'] ) ) {…}中,即按下「送出」鈕,檢查資料表是否改成功,然後重導向送出「資料庫更新成功」再回到cat2groupperm.php,
    「include( "mygroupperm.php" ) ;」修改為「include( "mygrouppermg.php" ) ;」,因mygroupperm.php三程式共用,不能只為本程式擅改,所以另拷一檔來改,名稱後加一g字,代表只處理一群組。 修改為"…cat2groupperm.php?gid=".$_REQUEST['gid'],從外界送入群組代碼;
    最後倒數第二行「echo $form->render() ;」改成「echo $form->render($_REQUEST['gid']) ;」
  4. 再改mygrouppermform.php中,類別MyXoopsGroupPermForm中render()函式的定義:
    「function render()」改為「function render($g=null)」,其中$g代表群組代碼,同時處理指定群組與不指定群組兩種情況,
    foreach (array_keys($glist) as $i) {…}的頭改為
    if(isset($g)){$gs=array($g);}else{$gs=array_keys($glist);}
    foreach ($gs as $i) {…}
    指定群組時,只有該群組產生所有類別的checkbox;未指定群組時,每個群組都產生所有類別的checkbox。
  5. 修改後,只要執行cat2groupperm.php?gid=群組代碼,就可以設定該群組的「類別的瀏覽權限」。

檔案上傳:

(一)傳檔系統(taduploader)tad:

  1. 150k,big5。用上傳梯次管理上傳期間、檔案類型。
  2. 上傳目錄在xoops的uploads/tadup,一梯次一資料夾。反安裝時,不刪除各上傳資料夾。
  3. 下載使用:去uploads/tadup。

(二)網路文件櫃(fileup)tad:

  1. 22.9k,big5。
  2. 上傳目錄在xoops的uploads/upfile。反安裝時,不刪除各上傳資料夾。
  3. 下載使用:在檔案列表中直接點閱。

(三)網路文件櫃(uploader):

  1. 116k,big5。不使用table管理,檔案直接上傳。
  2. 上傳目錄在xoops的模組目錄的本模組下的/files。要調權限,上傳才會成功。反安裝時,不刪除各上傳資料夾。
  3. 下載使用:在檔案列表中直接點閱。

線上表單:

(一)(formulaire)V324:

  1. 歐展嘉實驗站 http://163.20.160.28/xoops2013u/ 帳號:eric 密碼:123456
  2. 表格可以隨意設計,填寫次數也不限,且可以設定不要發信(不然填一次就收一次,也是很煩吧)
  3. 但無法設定當天幾點後關閉表格(這樣就會有爭議產生了..填了不調是怎樣..但明明是下班後才填的)
  4. 且沒有檢視填寫人數的功能
  5. 產生的CSV也是亂碼...