Xoops進階筆記
- 概述
- 安裝與備份
- 基本操作
- 資料表
2.0.1x
2.2.4
2.4及2.5版
- 外觀(布景)
- 將內容嵌入xoops
- 模組架構
- 官方模組及有用模組
2.0.1x官方模組
2.2.4有用模組
- 系統常數、變數、函式、物件
- 載入程序(mainfile,common)
- 常數
- 全域變數
$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」
- smarty可用全域變數
- 常用函式
- 核心數據類別XoopsObject
- 大型class
- smarty 介紹
- 工具
- 改xoops
諸模組
- piCal行事曆模組
- 資料表欄位說明
- 管理介面
- 使用介面
- 程式說明
- 修改模組 for 工作追蹤
- 修改模組 for 記工單
- 修改模組 for 會議
- 修改模組 for 「類別的瀏覽權限」
- 檔案上傳
- 線上表單
壹、概述
○、xoops:
- 可駕駛的架站機。
- 所有網站的共同元素集中管理,改一個地方,生效於所有地方。
- 共同的組版流程,達成布景共用。達成一網站內容,多外觀。
- 共同的功能開發流程,達成程式碼共用。(模組)
- 用設定調整一切。取代改寫程式碼。
- html和php分離。可將美工交給專人處理。
- 以模組為單位,每模組控制「資料表」「程式」「區塊(函式)」「樣版」「使用者自訂欄位」。
貳、安裝與備份
一、適用版本:
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
|
注意 | | |
|
二、下載及安裝:
(一)正式安裝:
- 到tw.xoops.org下載
- 到xoops.tnc.edu.tw下載
- 解壓縮後取用html檔。
- 上傳到指定目錄。
- 對uploads、cache、templates_c三夾及mainfile.php下chmod 777 檔名 -R。
- 設一組資料庫帳號密碼;增一資料庫;設該帳號對該資料庫有完整權限。2.2x須有alter權限,因要增加欄位。
- 從瀏覽器執行所在的url。
- xoops輸出網頁受php.ini中「default_charset = "xxxx"」管制,所以只要在這設utf-8,而httpd.conf中設「AddDefaultCharset big5」並沒有關係,可以讓其他不使用php的網頁以big5碼正常顯示。
(二)用拷備造xoops:
- 複製丁丁製的xoops2.2.4.org,其中絕對路徑與相對路徑均已用變數處理。
- 檢查公眾(Apache)能不能寫入templates_c、cache、uploads。因為samba拷備預設公眾沒有寫入權限。
- 拷資料庫到新的名稱。
- 設一資料庫user可管此資料庫。
- 讓資料庫帳號能管新的資料庫名稱。
- 調資料表
- xoops_banner中三個圖的url。不使用廣告或要改廣告就沒關係。
- xoops_user中的url。
- 改mainfile.php
- XOOPS_ROOT_PATH
- XOOPS_URL
- XOOPS_DB_USER :新user
- XOOPS_DB_PASS :password
- XOOPS_DB_NAME :新資料庫名稱
- xoops_users表中,建或改網站管理者,pass欄用MD5編碼,level欄設5。
三、安裝後基本可用模組:
xoops版本 | 2.0.1x | 2.2.4
|
- system 系統
- mydownloads 檔案下載
- newbb 討論區
- xoopsfaq 常見問題及解答
- xoopspartners 夥伴網站
- mylinks 網站連結
- sections 精華區
- xoopsheadline 友站新聞
- contact 連繫我們(寫信給站長)
- news 新聞區
- xoopspoll 票選
- xoopsmembers 會員管理
|
- system 系統
- pm 私人訊息 :使用xoops_priv_msgs表
- profile 使用者管理:使用xoops_profile_category(站長自定欄位值)
|
三、對MySQL4.1以上的校調:
(一)xoops關於字集語言的設定
- \language\語言名:此目錄名,為各區塊語言包文件夾之統一採用之語言名稱。
- \language\schinese\global.php
define('_CHARSET', 'UTF-8');
define('_LANGCODE', 'zh-tw');
define("XOOPS_USE_MULTIBYTES", "1");
- \install\language\tchinese\install.php 中 define('_INSTALL_CHARSET','UTF-8');
- \install\index.php 中
$content .= ">".$lang."</option>";
$content .= ">".(($lang=="tchinese")?"正體中文UTF8":$lang).""</option>";
- \upgrade\language\schinese\upgrade.php 中 define('_UPGRADE_CHARSET','UTF-8');
- \class\xoopsmailer.php
(二)MySQL4.1以上校調
- 正常的校對方式是utf8_general_ci;utf8_unicode_ci雖可在phpMyAdmin中看到中文但會導致 smarty template_c 底下的 cache 檔無法正常產生。其他則在phpMyAdmin中會看到亂碼。
- xoops安裝後,各資料庫及資料表校對方式會是latin1_swedish_ci不是 utf8_general_ci。因為這是MySQL預設的校對方式。
- 校對方式在以下四層皆可設定:伺服器、資料庫、資料表、欄,越細的設定越優先。
- 在/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'
- 如果不能改my.cnf,則進phpMyAdmin,在諸表格建立前「選某資料庫/管理/校對/utf8_general_ci」,使資料庫預設校對方式為「utf8_general_ci」,以後所建之表皆預設此校對方式。
- 如果資料庫的校對方式也不能設定,在\install\sql\mysql.structure.sql中「TYPE=MISAM」換成「TYPE=MyISAM CHARACTER SET utf8 COLLATE utf8_general_ci」。
- 將\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");
- 如果 MySQL版本<4.1 上一項不要改。
- phpmyadmin 裡, 連線校對選用 utf8_general_ci;
※賤招,不管校對方式,修改phpMyAdmin
- 編/phpMyAdmin/libraries/select_lang.lib.php
- 改 $mysql_charset_map 陣列的設定,將big5和utf-8的字集對應到latin1(代表圾垃進圾垃出)
支援Big5:353行「'big5'=>'big5',」→「'big5'=>'latin1',」
支援UTF-8:370行「'utf-8'=>'utf8',」→「'utf-8'=>'latin1',」
- 改 $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
- mysqld 在跟 client 溝通的時候有三個地方要設定編碼: client, connection 跟 result ,
mysql client 的編碼設定是告訴 mysqld data 會用什麼編碼送過來,
mysql connection 則是告訴 mysqld data 要用哪種編碼存進 database 裡,
mysql result 則是告訴 mysqld data 吐出來的時候要吐成哪種編碼。
- mysql 在 client, connection, server, result, 間沒有做內部轉換編碼的動作,client 把 UTF-8 用 latin1 connection 送進去應該「不會」掉資料。
如果 client, result 設定成同一個編碼, connection 設定不一樣時並「不會」掉資料。差別只是存在電腦裡的資料要被怎樣斷句(7 bit or 16bit)解釋而已。
- utf8_general_ci 在轉換時速度比較快。來源 codepage 裡面的一個字元只能對應到目標 codepage 裡面的一個字元,如德文裡的ß(2byte)轉換成英文的時候如果是用 utf8_unicode_ci 轉換會變成正確的 ss。
- utf8_unicode_ci 在轉換時比較精準。來源 codepage 裡的一個字元對應到目標 codepage 裡的多個字元(反之亦可),如德文裡的ß(2byte)轉換成英文的時候如果是用 utf8_unicode_ci 轉換會變成單byte的 s。
- 如果可以的話請盡量用 utf8_unicode_ci 而不要用 utf8_general_ci ,雖然對 multibyte字(如中文)來說這兩個都沒差,但是 utf8 的網頁誰也不知道哪天會不會有這種字元出現在你的網頁上,所以如果設成 utf8_unicode_ci 你就不需要擔心貼上去之後資料在轉換間遺失了。
- 但xoops2.2偏偏必須用 utf8_general_ci。Drupal看到的資料也是設utf8_general_ci。
(四)MySQL4.1前後實體資料格式
- 將4.1以前的資料庫實體資料檔案搬到4.1以後的資料夾。4.1以前結構資料如中文表名、中文欄名已用utf8編碼,所以結構的中文在4.1以後能正常顯示。
4.1以前欄值資料是採圾垃進圾垃出的方式,而4.1以後欄值採取utf8編碼,必須使用latin1字集,才能正確顯示中文。
- 上項操作下,xoops會完全正常,也不必進行任何修改,因為xoops如果不加 mysql_query("set name 'utf8'"); 也是採圾垃進圾垃出的方式,而且不使用中文表名、欄名。
- 所以(二)中討論的賤招,對上項實體資料檔案由4.1之前搬到4.1之後,完全不適用。騙phpMyAdmin用拉丁字集解讀欄值,將使中文表名、欄名解讀失誤。
參、基本操作:
一、設定:
二、安裝模組:
三、使用區塊:
- 新增區塊時,本來新增完,樣版應該就會載入資料表,如果沒有,可以更新所屬群組,強迫載入。
- 使用者管理模組應開放匿名者模組使用權,人家才能註冊。
-
四、群組與權限:
- 由後台新增使用者時,無使用者管理模組,只要將先使用者加入xoops_users;有使用者管理模組時還要加入xoops_user_profile,否則有功能,不能顯示姓名。
- 剛由後台新增使用者時,不屬於任何群組(連訪客都不是),沒有任何權限(連訪客權限都沒有),一定要用介面加入群組。
-
五、布景:
六、系統功能:
(一)、通知:
- 「管理區首頁/模組/使用者管理/欄位/編輯"通知方法"/設定檔中可編輯欄位」決定何群組可編此欄,如已註冊的使用者。
- 「管理區首頁/模組/使用者管理/使用者/編輯使用者」選人,再選編輯,再選通知方法:空值為關閉,1為私人訊息,2為email。
- http://xoops_url/notifications.php依uid列出該使用者相關的通知,並連結至各模組內的各觸發通知事件。
- 有通知功能的模組會前台會列出通知選項,分兩層:類別,類別之下的各種事件。請勾選要觸發通知的事件種類。
- 有通知功能的模組在後台的「偏好設定」中,多「啟用通知」和「啟用特定的事件」,前者決定設定通知是在模組內還是區塊內;後者決定有那些觸發通知的事件。
肆、基本資料表:
甲、2.0.1x
一、各資料表筆數說明
- xoops_avatar : 0:頭像
- xoops_avatar_user_link : 0:
- xoops_banner : 3:一個廣告客戶的三個廣告,絕對url。可指向外部。
- xoops_bannerclient : 1:一個廣告客戶的名稱、郵址、帳號、密碼
- xoops_bannerfinish : 0:
- xoops_block_module_link :12:各區塊出現於何頁面,0:出現於所有頁面,-1:出現於最頂端頁面(首頁),模組代碼:出現於某模組中。
- xoops_config :71:偏好設定諸設定值。
- xoops_configcategory : 6:6個設定類別
- 一般設定
- 使用者資訊設定
- Meta 標記及頁尾註腳
- 字彙檢核選項
- 搜尋選項
- 郵件設定
- xoops_configoption :27:設定類型(conf_formtype)為select者,諸選項的值。
- xoops_group_permission :55:基本權限。管理員有15項系統管理、1個模組管理、1個模組使用、12個區塊使用權,共29個權限;會員有1個模組使用、12個區塊使用權,共13個權限;公眾初始權限同會員,共13個權限。29+13+13=55。
- xoops_groups : 3:管理員、會員、公眾三群組
- xoops_groups_users_link : 2:
- xoops_image : 0:
- xoops_imagebody : 0:
- xoops_imagecategory : 0:
- xoops_imgset : 1:default圖群
- xoops_imgset_tplset_link: 1:default樣版組與default圖群連連看
- xoops_imgsetimg : 0:
- xoops_modules : 1:系統模組
- xoops_newblocks :12:12個區塊
- xoops_online : 0:
- xoops_priv_msgs : 0:
- xoops_ranks : 7:七級會員的id及定義
- xoops_session : 1:
- xoops_smiles :17:十七個表情符號的id,code和圖
- xoops_tplfile :27:default樣版組的27個樣版
- xoops_tplset : 1:default樣版組
- xoops_tplsource :27:27個樣版組的檔案原始碼抄進欄位中
- xoops_users : 1:帳號,絕對url,其中level為0代表未啟用。
- xoops_xoopscomments : 0:
- xoops_xoopsnotifications: 0:
二、樣版組資料表:
xoops一開始只有一個不可寫入的樣版組(default),所有自製布景均無法生效。須至少複製出一個可寫入的樣版組,供自製布景寫入,default以外的布景才會生效。
基本樣版組共27筆,由xoops_tplfilexoops_tplfile和xoops_tplsource描述,複製一組後變54筆。
(一)資料表欄位說明:
- xoops_tplsetxoops_tplset:樣版組
- tplset_id :代碼,從1編起
- tplset_name :名稱,如default、marriage
- tplset_desc :說明
- tplset_credits:空白
- tplset_created:建立時間
- xoops_tplfile:各樣版檔所在
- tpl_id :代碼
- tpl_refid :次編號,模組用為模組編號;區塊用為區塊編號。
- tpl_module :隸屬模組
- tpl_tplset :隸屬樣版組
- tpl_file :樣版檔名
- tpl_desc :樣版說明
- tpl_lastmodified:最後修改時間
- tpl_lastimported:最後載入時間
- tpl_type :模組或區塊
- xoops_tplsource:筆數和xoops_tplfilexoops_tplfile相同
- tpl_id :代碼
- tpl_source:帶smarty的html碼。抄自樣版檔。
(二)15個基本樣版,簡介如下:
- system_imagemanager.html; 供imagemanager.php
- system_imagemanager2.html; 供imagemanager.php
- system_userinfo.html; 供userinfo.php(觀看帳號)
- system_userform.html; 供user.php (登入)
- system_rss.html; 供backend.php
- system_redirect.html; 供include/functions.php用,重導向時的兩頁之間的說明
- system_comment.html; 讓三種評論格式含入的子樣版
- system_comments_flat.html; 讓樣版含入的「平板評論樣版」
- system_comments_thread.html; 讓樣版含入的「樹(線)狀評論樣版」
- system_comments_nest.html; 讓樣版含入的「巢板評論樣版」
- system_siteclosed.html; 供include/common.php用的關站說明
- system_dummy.html; 只含一個smarty變數 <{$dummy_content}> 。虛擬樣版檔,為了撐住無樣版內容,不可以加以編輯。
- system_notification_list.html; 供notifications.php(使用中的通知)
- system_notification_select.html;供其他樣版加入通知功能含入的「通知功能樣版」。
- system_block_dummy.html; 只含一個smarty變數 <{$block.content}> 。虛擬樣版,為了自行定義的區塊或沒有樣版的區塊。
(三)12個系統模組區塊使用樣版,其區塊函式定義在/modules/system/blocks/system_blocks.php:
- 使用者選單 (ID: 1)
- 登入 (ID: 2)
- 搜尋 (ID: 3)
- 待審內容 (ID: 4)
- 主選單 (ID: 5)
- 站台資訊 (ID: 6)
- 誰在線上 (ID: 7)
- 張貼者排行 (ID: 8)
- 新會員 (ID: 9)
- 最新評論 (ID: 10)
- 通知選項 (ID: 11)
- 版面風格 (ID: 12)
乙、2.2.4版
一、資料表基本筆數說明:
- xoops_avatar : 0:頭像
- xoops_avatar_user_link : 0:頭像和帳號連結
- xoops_banner : 3:一個廣告客戶的三個廣告,絕對url。可指向外部。
- xoops_bannerclient : 1:一個廣告客戶的名稱、郵址、帳號、密碼
- xoops_bannerfinish : 0:廣告起迄
- xoops_block_instance : 3:啟用區塊(參數)(2.2新增)見五
- xoops_block_module_link : 3:各區塊出現於何頁面。見區塊資料表。
- xoops_config :65:偏好設定諸設定值。
- xoops_configcategory : 6:各模組的各設定類別
- 代碼1:一般設定,系統模組與使用者管理模組皆有
- 代碼2:使用者資訊設定,系統模組無,使用者管理模組才有
- 代碼3:Meta 標記及頁尾註腳,系統模組
- 代碼4:字彙檢核選項,系統模組
- 代碼5:搜尋選項,系統模組
- 代碼6:郵件設定,系統模組
- 代碼7:帳號授權選項,系統模組
- 代碼0:其他設定選項,其他模組
- xoops_configoption :24:設定類型(conf_formtype)為select者,諸選項的值。
- xoops_group_permission :32:基本權限。管理員有15項系統管理;三群組對三區塊皆有使用權共9個權限;管理員對系統模組有1個模組管理權、三群組對系統模1個模組皆有使用權,共4個權限,但此4個權限被重覆兩次變成8個權限。15+9+(4*2)=32。
- xoops_groups : 3:管理員、會員、公眾三群組
- xoops_groups_users_link : 2:站長屬於管理員、站長屬於會員。
- xoops_image : 0:圖片描述
- xoops_imagebody : 0:圖片存成欄值
- xoops_imagecategory : 0:
- xoops_imgset : 1:default圖群
- xoops_imgset_tplset_link: 1:default樣版組與default圖群連連看
- xoops_imgsetimg : 0:
- xoops_modules : 1:系統模組
- xoops_newblocks :13:13個區塊
- xoops_online : 0:
- xoops_ranks : 7:七級會員的id及定義
- xoops_session : 1:
- xoops_smiles :17:十七個表情符號的id,code和圖
- xoops_tplfile :30:default樣版組的30個樣版,17個模組用,13個區塊用
- xoops_tplset : 1:default樣版組
- xoops_tplsource :30:27個樣版組的檔案原始碼抄進欄位中
- xoops_user_profile : 1:有幾個使用者個人資料(2.2新增)
- xoops_user_profile_field:12:每個使用者個人資料有那幾欄(2.2新增),預設12欄。
- xoops_users : 1:帳號,絕對url,其中level為0代表未啟用。
- xoops_xoopscomments : 0:評論
- xoops_xoopsnotifications: 0:通知
※xoops_priv_msgs表 : 0:改列入「私人訊息」(pm)
二、資料表相依說明:
- 樣版相依:涉四個表
- 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']
- 使用者/群組相依,涉七個表
- 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
- 模組相依,涉九個表
- 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
- 區塊相依,涉五個表
- 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筆。
(一)資料表欄位說明:
- xoops_tplsetxoops_tplset:樣版組
- tplset_id :代碼,從1編起
- tplset_name :名稱,如default、marriage
- tplset_desc :說明
- tplset_credits:空白
- tplset_created:建立時間
- xoops_tplfile:各樣版檔所在
- tpl_id :代碼
- tpl_refid :次編號,模組用為模組編號;區塊用為區塊編號。
- tpl_module :隸屬模組
- tpl_tplset :隸屬樣版組
- tpl_file :樣版檔名
- tpl_desc :樣版說明
- tpl_lastmodified:最後修改時間
- tpl_lastimported:最後載入時間
- tpl_type :模組用或區塊用
- xoops_tplsource:筆數和xoops_tplfilexoops_tplfile相同
- tpl_id :代碼
- tpl_source:帶smarty的html碼。抄自樣版檔。
(二)18-1個系統模組用樣版,簡介如下:
- system_imagemanager.html; 供imagemanager.php
- system_imagemanager2.html; 供imagemanager.php
- system_userinfo.html; 供userinfo.php(觀看帳號)
- system_userform.html; 供user.php (登入)
- system_rss.html; 供backend.php
- system_redirect.html; 供include/functions.php用,重導向時的兩頁之間的說明
- system_comment.html; 讓三種評論格式含入的子樣版
- system_comments_flat.html; 讓樣版含入的「平板評論樣版」
- system_comments_thread.html; 讓樣版含入的「樹(線)狀評論樣版」
- system_comments_nest.html; 讓樣版含入的「巢板評論樣版」
- system_siteclosed.html; 供include/common.php用的關站說明
- system_dummy.html; 只含一個smarty變數 <{$dummy_content}> 。虛擬樣版檔,為了撐住無樣版內容,不可以加以編輯。
- system_notification_list.html; 供notifications.php(使用中的通知)
- system_notification_select.html;供其他樣版加入通知功能含入的「通知功能樣版」。
- system_block_dummy.html; 只含一個smarty變數 <{$block.content}> 。虛擬樣版,為了自行定義的區塊或沒有樣版的區塊。2.2中移至區塊樣版。
- system_error.html; 供error.php(錯誤訊息),2.2版新增,之前無error.php程式。
- system_plain.html; 精簡版外觀,無logo、無banner、無諸blocks,2.2版新增。供class/theme.php使用,當output_type為plain時,使用此樣版。
- system_admin_block.html; 區塊管理的樣版。供modules\system\admin\blocksadmin\blocksadmin.php使用。
(三)13個系統模組區塊使用樣版,其區塊函式定義在/modules/system/blocks/system_blocks.php:
- 使用者選單 (ID: 1)
- 登入 (ID: 2)
- 搜尋 (ID: 3)
- 待審內容 (ID: 4)
- 主選單 (ID: 5)
- 本站資訊 (ID: 6)
- 誰在線上 (ID: 7)
- 張貼者排行 (ID: 8)
- 新會員 (ID: 9)
- 最新評論 (ID: 10)
- 通知選項 (ID: 11)
- 版面風格 (ID: 12)
- 虛擬樣版 (ID: 13):system_block_dummy.html;只含一個smarty變數 <{$block.content}>,為了自行定義的區塊或沒有樣版的區塊。2.0中在系統模組樣版中,2.2移至系統區塊樣版。
四、群組及權限資料表xoops_group_permission:不能隨便改本表,xoops是依index來抓本表內容,顯出各區塊,index和各筆對不上時,各區塊都出不來。
欄位說明
- gperm_id :流水號。每次「編輯群組」,本表中該群組(gperm_modid)之該權限類別(gperm_name)所有相關筆數均刪除,再插入新筆。所以流水號增加極快。定期整理可以將本表匯出再匯入,讓 gperm_id 變緊湊。
- gperm_groupid:群組代碼
- gperm_modid :模組代碼
- gperm_name :各模組的權限類別,每一類別下再用 gperm_itemid 去定義各種權限的作用對象。
- 系統管理(system)
- block_read(區塊使用):其 gperm_itemid 代表已啟用區塊代碼,看xoops_block_instance.instanceid
- module_admin(模組管理):其 gperm_itemid 代表模組代碼,看xoops_modules.mid
- module_read(模組使用):其 gperm_itemid 代表模組代碼,看xoops_modules.mid
- system_admin(系統管理):其 gperm_itemid 代表 功能代表,記於modules/system/constants.php中
- GROUP (群組)1
- USER ()2抑制
- PREF (偏好設定)3
- MODULE (模組)4
- BLOCK (區塊)5
- THEME ()6抑制
- FINDU (尋找使用者)7
- MAILU (寄信給使用者)8
- IMAGE (圖片管理)9
- AVATAR (頭像管理)10
- URANK (使用者等級)11
- SMILE (表情符號)12
- BANNER (廣告)13
- COMMENT(評論)14
- TPLSET (樣版)15
- 用戶管理(profile)
- profile_show(使用者欄位設定中可編輯):其 gperm_itemid 代表欄位代碼看xoops_user_profile_field.fieldid
- profile_edit(使用者欄位設定中可刪除):其 gperm_itemid 代表欄位代碼看xoops_user_profile_field.fieldid
- profile_search(使用者欄位設定中可蒐尋):其 gperm_itemid 代表欄位代碼看xoops_user_profile_field.fieldid
- profile_access():其 gperm_itemid 代表欄位代碼有1,2
- 行事曆(piCal)
- pical_cat(行事曆中可閱覽某類事件):其 gperm_itemid 代表事件類別代碼,看xoops_pical_cat.cid
- pical_global(對事件增、編、刪權限)
- 1 :新增事件
- 2 :新增事件(不需審核)
- 4 :編輯事件
- 8 :編輯事件(不需審核)
- 32:刪除事件(不需審核)
- 缺16,刪除事件(需審核)
- 討論區(newbb)
- category_access(類別權限):其 gperm_itemid 代表討論區分類id
- forum_access (可以訪問):其 gperm_itemid 代表forum_id
- forum_addpoll (發起投票):其 gperm_itemid 代表forum_id
- forum_attach (可傳附件):其 gperm_itemid 代表forum_id
- forum_delete (可刪自帖):其 gperm_itemid 代表forum_id
- forum_edit (可編己帖):其 gperm_itemid 代表forum_id
- forum_html (可用HTML):其 gperm_itemid 代表forum_id
- forum_noapprove(免審發帖):其 gperm_itemid 代表forum_id
- forum_post (可以發帖):其 gperm_itemid 代表forum_id
- forum_reply (可以回復):其 gperm_itemid 代表forum_id
- forum_signature(可用簽名檔):其 gperm_itemid 代表forum_id
- forum_type (可用主題類別):其 gperm_itemid 代表forum_id
- forum_view (可以看帖):其 gperm_itemid 代表forum_id
- forum_vote (可以投票):其 gperm_itemid 代表forum_id
五、區塊資料表:
(○)、基本說明:
- 本質上是一筆資料或一組函式(最多兩個,編輯及顯示)。
- 構成畫面的顯示單位,可以有自己的外觀設計。
(一)xoops_block_module_link:區塊與模組關係
- block_id :區塊的啟用編碼
- module_id:0代表系統層級設定,其pageid值0,1,2代表出現在所有頁面,首頁(最上層頁面),管理頁面。其他值代表模組編號,說明其下一點。
- pageid:0代表出現於模組的所有頁面,值1,2,3…代表模組設定檔中 $modversion['pages'][幾] ,即該模組中可顯示區塊的位置。
(二)xoops_group_permission:區塊群組權限。見基本資料表。
(三)xoops_newblocks:區塊資料,見基本資料表。
六、2.2 改變:
(一)外觀:
- 2.2之前沒有精簡外觀,管理介面也不能使用布景。
- 2.2之後,不用新增「樣板組」將其他樣板載入第二個樣粄組,即可將其他樣板套用於defalt樣版組。
- class資料夾下新增theme.php管外觀變化。
- 其中函式display,看pageType是不是admin,是就取admin.php配themeadmin.html;不是就取main.php配theme.html。
- 其中函式display,如output_type設為plain,則採用精簡外觀,使用新增system_plain.html;不是再看pagetype是不是設為admin,如是取用themeadmin.html;皆不是取用defaultFile(theme.html)。
- 其中函式loadTheme(),先看有沒有選theme,再看pagetype是不是admin,如果是就去找theme_set_admin,再去找該布景目錄下的themeadmin.html。
(二)xoops_newblocks:
新版拆分為兩個檔xoops_newblocks放所有區塊,xoops_block_instance放要用的區塊。
原來共20欄
- bid :區塊編號
- mid :隸屬模組編號,1代表系統。-1代表無主。
- func_num :在模組之下的次編號
- options :運作參數;顯示秀圖;秀圖寬度;
- name :區塊中文名稱(xoops命名)
- title :區塊中文抬頭(使用者命名),預設值同name
- content :區塊原始碼,text型,最大65535位元組。
- side :位置,0-4代表左、中、右
- weight :順位
- visible :是否顯示。
- block_type :S或M。S,由函式套Smarty產生內容;函式所在處由以下各欄決定,使用者不能編內容。
- c_type :內容類型,H,HTML;S,php Script;S,自動格式(啟用臉譜);T,自動格式(關閉臉譜)
- isactive :可否區塊管理
- dirname :函式檔所在之資料夾,以xoops網頁根目錄的相對路徑。
- func_file :函式所在程式檔名。
- show_func :顯出函式。
- edit_func :編輯函式。
- template :區塊樣版檔名稱
- bcachetime :區塊快取週期,有效快取時間。
- last_modified:最後修改時間
新版xoops_newblocks
- bid :區塊編號
- mid :隸屬模組編號,1代表系統。-1代表無主。
- options :運作參數;顯示秀圖;秀圖寬度;
- name :區塊中文名稱(xoops命名)
- c_type :內容類型,H,HTML;S,php Script;S,自動格式(啟用臉譜);T,自動格式(關閉臉譜)
- isactive :可否區塊管理
- dirname :函式檔所在之資料夾,以xoops網頁根目錄的相對路徑。
- func_file :函式所在程式檔名。
- show_func :顯出函式。
- edit_func :編輯函式。
- template :區塊樣版檔名稱
- last_modified:最後修改時間
新版xoops_block_instance
- instanceid :顯示區塊編號
- bid :區塊編號
- options :運作參數;顯示秀圖;秀圖寬度;
- title :區塊中文抬頭(使用者命名),預設值同name
- side :位置,0-4代表左、中、右
- weight :順位
- visible :是否顯示。
- bcachetime :區塊快取週期,有效快取時間。
取消
- func_num :在模組之下的次編號
- content :區塊原始碼,text型,最大65535位元組。
- block_type :S或M。S,由函式套Smarty產生內容;函式所在處由以下各欄決定,使用者不能編內容。
(三)使用者xoops_user_profile可變動欄位
- xoops_user_profile 每位註冊者的個人資料
- xoops_user_profile_fieldcontent 上表各欄之說明
- xoops_profile_fieldcategory 站長自訂欄位與自訂類別的關係資料表
- xoops_profile_category 站長自訂之欄位類別
預設之xoops_user_profile欄位
- umode 評論顯示模式
- uorder 評論排序方式
- notify_method 通知方法
- notify_mode 預設通知模式
- user_regdate 註冊日期
- posts 張貼數
- attachsig 附上簽名檔
- timezone_offset 時區
- user_mailok 是否要接收通知信
- theme 版面風格
- actkey 使用者啟動碼
- last_login 最後登入時間
pm所加之xoops_user_profile欄位
- 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欄位
- user_aim AIM
- user_icq ICQ
- user_from 居住地
- user_sig 簽名
- user_viewemail 使用者可以看到我的電子郵件位址
- user_yim YIM
- user_msnm MSN
- bio 額外的資訊
- user_intrest 興趣
- user_occ 職業
- url 個人網站
- newemail 新的電子郵件
- xxxx 其他站長自訂欄位
(四)錯誤
- 模組更新或拆除時會誤刪別的樣版,所以要常備份xoops_tplfile和xoops_tplsource。
- pm模組指定pm_lookup.html樣板,卻沒有此html檔,使xoops_tplfile比xoops_tplsource每樣板組都多出一筆。
- xoops_group_permission中管理員對系統模組有1個模組管理權、三群組對系統模1個模組皆有使用權,共4個權限,但此4個權限被重覆兩次變成8個權限。此重覆在更新權限設定時,會自然修正,不必刻意處理。
丙、2.4及2.5版
一、資料表(共32張)基本筆數說明:
- xoops_avatar : 0:頭像
- xoops_avatar_user_link : 0:頭像和帳號連結
- xoops_banner : 3:一個廣告客戶的三個廣告,絕對url。可指向外部。
- xoops_bannerclient : 1:一個廣告客戶的名稱、郵址、帳號、密碼
- xoops_bannerfinish : 0:廣告起迄
- xoops_block_module_link :12:各區塊出現於何頁面。見區塊資料表。
- xoops_cache_model : 0:
- xoops_config :130:偏好設定諸設定值。2.4版約161項設定值。
- xoops_configcategory : 7:各模組的各設定類別
- 代碼1:一般設定,系統模組與使用者管理模組皆有
- 代碼2:使用者資訊設定,系統模組無,使用者管理模組才有
- 代碼3:Meta 標記及頁尾註腳,系統模組
- 代碼4:字彙檢核選項,系統模組
- 代碼5:搜尋選項,系統模組
- 代碼6:郵件設定,系統模組
- 代碼7:帳號授權選項,系統模組
- 代碼0:其他設定選項,其他模組
- xoops_configoption :47:設定類型(conf_formtype)為select者,諸選項的值。2.4版約99個選項值。
- xoops_groups : 3:管理員、會員、公眾三群組
- xoops_groups_users_link : 2:站長屬於管理員、站長屬於會員。
- xoops_group_permission :57:基本權限。管理員有17項系統管理權限(system_admin);三群組對12區塊皆有使用權共36個block_read權限;管理員對系統模組有1個模組管理權(module_admin)、三群組對系統模皆有使用權共3個module_read權限,但此4個權限被重覆兩次變成8個權限。17+36+1+3=57。
- xoops_image : 0:圖片描述
- xoops_imagebody : 0:圖片存成欄值
- xoops_imagecategory : 0:
- xoops_imgset : 1:default圖群
- xoops_imgsetimg : 0:
- xoops_imgset_tplset_link: 1:default樣版組與default圖群連連看
- xoops_modules : 1:系統模組
- xoops_newblocks :12:12個區塊
- xoops_online : 0:上線者
- xoops_priv_msgs : 0:本表在2.2版時改列入「私人訊息」(pm)模組,2.4、2.5又改回系統模組
- xoops_ranks : 7:七級會員的id及定義
- xoops_session : 1:
- xoops_smiles :17:十七個表情符號的id,code和圖
- xoops_tplfile :50:default樣版組的50個樣版,38個模組用,12個區塊用
- xoops_tplset : 1:default樣版組
- xoops_tplsource :50:50個樣版組的檔案原始碼抄進欄位中
- xoops_users : 1:帳號,絕對url,其中level為0代表未啟用。
- xoops_xoopscomments : 0:評論
- xoops_xoopsnotifications: 0:通知
二、資料表相依說明:
- 樣版相依:涉四個表
- 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']
- 使用者/群組相依,涉七個表
- 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
- 模組相依,涉九個表
- 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
- 區塊相依,涉五個表
- 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筆。
(一)資料表欄位說明:
- xoops_tplsetxoops_tplset:樣版組
- tplset_id :代碼,從1編起
- tplset_name :名稱,如default、marriage
- tplset_desc :說明
- tplset_credits:空白
- tplset_created:建立時間
- xoops_tplfile:各樣版檔所在
- tpl_id :代碼
- tpl_refid :次編號,模組用為模組編號;區塊用為區塊編號。
- tpl_module :隸屬模組
- tpl_tplset :隸屬樣版組
- tpl_file :樣版檔名
- tpl_desc :樣版說明
- tpl_lastmodified:最後修改時間
- tpl_lastimported:最後載入時間
- tpl_type :模組用或區塊用
- xoops_tplsource:筆數和xoops_tplfilexoops_tplfile相同
- tpl_id :代碼
- tpl_source:帶smarty的html碼。抄自樣版檔。
(二)18-1個系統模組用樣版,簡介如下:
- system_imagemanager.html; 供imagemanager.php
- system_imagemanager2.html; 供imagemanager.php
- system_userinfo.html; 供userinfo.php(觀看帳號)
- system_userform.html; 供user.php (登入)
- system_rss.html; 供backend.php
- system_redirect.html; 供include/functions.php用,重導向時的兩頁之間的說明
- system_comment.html; 讓三種評論格式含入的子樣版
- system_comments_flat.html; 讓樣版含入的「平板評論樣版」
- system_comments_thread.html; 讓樣版含入的「樹(線)狀評論樣版」
- system_comments_nest.html; 讓樣版含入的「巢板評論樣版」
- system_siteclosed.html; 供include/common.php用的關站說明
- system_dummy.html; 只含一個smarty變數 <{$dummy_content}> 。虛擬樣版檔,為了撐住無樣版內容,不可以加以編輯。
- system_notification_list.html; 供notifications.php(使用中的通知)
- system_notification_select.html;供其他樣版加入通知功能含入的「通知功能樣版」。
- system_block_dummy.html; 只含一個smarty變數 <{$block.content}> 。虛擬樣版,為了自行定義的區塊或沒有樣版的區塊。2.2中移至區塊樣版。
- system_error.html; 供error.php(錯誤訊息),2.2版新增,之前無error.php程式。
- system_plain.html; 精簡版外觀,無logo、無banner、無諸blocks,2.2版新增。供class/theme.php使用,當output_type為plain時,使用此樣版。
- system_admin_block.html; 區塊管理的樣版。供modules\system\admin\blocksadmin\blocksadmin.php使用。
(三)13個系統模組區塊使用樣版,其區塊函式定義在/modules/system/blocks/system_blocks.php:
- 使用者選單 (ID: 1)
- 登入 (ID: 2)
- 搜尋 (ID: 3)
- 待審內容 (ID: 4)
- 主選單 (ID: 5)
- 本站資訊 (ID: 6)
- 誰在線上 (ID: 7)
- 張貼者排行 (ID: 8)
- 新會員 (ID: 9)
- 最新評論 (ID: 10)
- 通知選項 (ID: 11)
- 版面風格 (ID: 12)
- 虛擬樣版 (ID: 13):system_block_dummy.html;只含一個smarty變數 <{$block.content}>,為了自行定義的區塊或沒有樣版的區塊。2.0中在系統模組樣版中,2.2移至系統區塊樣版。
四、群組及權限資料表xoops_group_permission:不能隨便改本表,xoops是依index來抓本表內容,顯出各區塊,index和各筆對不上時,各區塊都出不來。
欄位說明
- gperm_id :流水號。每次「編輯群組」,本表中該群組(gperm_modid)之該權限類別(gperm_name)所有相關筆數均刪除,再插入新筆。所以流水號增加極快。定期整理可以將本表匯出再匯入,讓 gperm_id 變緊湊。
- gperm_groupid:群組代碼
- gperm_modid :模組代碼
- gperm_name :各模組的權限類別,每一類別下再用 gperm_itemid 去定義各種權限的作用對象。
- 系統管理(system)
- block_read(區塊使用):其 gperm_itemid 代表已啟用區塊代碼,看xoops_block_instance.instanceid
- module_admin(模組管理):其 gperm_itemid 代表模組代碼,看xoops_modules.mid
- module_read(模組使用):其 gperm_itemid 代表模組代碼,看xoops_modules.mid
- system_admin(系統管理):其 gperm_itemid 代表 功能代表,記於modules/system/constants.php中
- GROUP (群組)1
- USER ()2抑制
- PREF (偏好設定)3
- MODULE (模組)4
- BLOCK (區塊)5
- THEME ()6抑制
- FINDU (尋找使用者)7
- MAILU (寄信給使用者)8
- IMAGE (圖片管理)9
- AVATAR (頭像管理)10
- URANK (使用者等級)11
- SMILE (表情符號)12
- BANNER (廣告)13
- COMMENT(評論)14
- TPLSET (樣版)15
- 用戶管理(profile)
- profile_show(使用者欄位設定中可編輯):其 gperm_itemid 代表欄位代碼看xoops_user_profile_field.fieldid
- profile_edit(使用者欄位設定中可刪除):其 gperm_itemid 代表欄位代碼看xoops_user_profile_field.fieldid
- profile_search(使用者欄位設定中可蒐尋):其 gperm_itemid 代表欄位代碼看xoops_user_profile_field.fieldid
- profile_access():其 gperm_itemid 代表欄位代碼有1,2
- 行事曆(piCal)
- pical_cat(行事曆中可閱覽某類事件):其 gperm_itemid 代表事件類別代碼,看xoops_pical_cat.cid
- pical_global(對事件增、編、刪權限)
- 1 :新增事件
- 2 :新增事件(不需審核)
- 4 :編輯事件
- 8 :編輯事件(不需審核)
- 32:刪除事件(不需審核)
- 缺16,刪除事件(需審核)
- 討論區(newbb)
- category_access(類別權限):其 gperm_itemid 代表討論區分類id
- forum_access (可以訪問):其 gperm_itemid 代表forum_id
- forum_addpoll (發起投票):其 gperm_itemid 代表forum_id
- forum_attach (可傳附件):其 gperm_itemid 代表forum_id
- forum_delete (可刪自帖):其 gperm_itemid 代表forum_id
- forum_edit (可編己帖):其 gperm_itemid 代表forum_id
- forum_html (可用HTML):其 gperm_itemid 代表forum_id
- forum_noapprove(免審發帖):其 gperm_itemid 代表forum_id
- forum_post (可以發帖):其 gperm_itemid 代表forum_id
- forum_reply (可以回復):其 gperm_itemid 代表forum_id
- forum_signature(可用簽名檔):其 gperm_itemid 代表forum_id
- forum_type (可用主題類別):其 gperm_itemid 代表forum_id
- forum_view (可以看帖):其 gperm_itemid 代表forum_id
- forum_vote (可以投票):其 gperm_itemid 代表forum_id
五、區塊資料表:
(○)、基本說明:
- 本質上是一筆資料或一組函式(最多兩個,編輯及顯示)。
- 構成畫面的顯示單位,可以有自己的外觀設計。
(一)xoops_block_module_link:區塊與模組關係
- block_id :區塊的啟用編碼
- module_id:0代表系統層級設定,其pageid值0,1,2代表出現在所有頁面,首頁(最上層頁面),管理頁面。其他值代表模組編號,說明其下一點。
- pageid:0代表出現於模組的所有頁面,值1,2,3…代表模組設定檔中 $modversion['pages'][幾] ,即該模組中可顯示區塊的位置。
(二)xoops_group_permission:區塊群組權限。見基本資料表。
(三)xoops_newblocks:區塊資料,見基本資料表。
六、2.2 改變:
(一)外觀:
- 2.2之前沒有精簡外觀,管理介面也不能使用布景。
- 2.2之後,不用新增「樣板組」將其他樣板載入第二個樣粄組,即可將其他樣板套用於defalt樣版組。
- class資料夾下新增theme.php管外觀變化。
- 其中函式display,看pageType是不是admin,是就取admin.php配themeadmin.html;不是就取main.php配theme.html。
- 其中函式display,如output_type設為plain,則採用精簡外觀,使用新增system_plain.html;不是再看pagetype是不是設為admin,如是取用themeadmin.html;皆不是取用defaultFile(theme.html)。
- 其中函式loadTheme(),先看有沒有選theme,再看pagetype是不是admin,如果是就去找theme_set_admin,再去找該布景目錄下的themeadmin.html。
(二)xoops_newblocks:
新版拆分為兩個檔xoops_newblocks放所有區塊,xoops_block_instance放要用的區塊。
原來共20欄
- bid :區塊編號
- mid :隸屬模組編號,1代表系統。-1代表無主。
- func_num :在模組之下的次編號
- options :運作參數;顯示秀圖;秀圖寬度;
- name :區塊中文名稱(xoops命名)
- title :區塊中文抬頭(使用者命名),預設值同name
- content :區塊原始碼,text型,最大65535位元組。
- side :位置,0-4代表左、中、右
- weight :順位
- visible :是否顯示。
- block_type :S或M。S,由函式套Smarty產生內容;函式所在處由以下各欄決定,使用者不能編內容。
- c_type :內容類型,H,HTML;S,php Script;S,自動格式(啟用臉譜);T,自動格式(關閉臉譜)
- isactive :可否區塊管理
- dirname :函式檔所在之資料夾,以xoops網頁根目錄的相對路徑。
- func_file :函式所在程式檔名。
- show_func :顯出函式。
- edit_func :編輯函式。
- template :區塊樣版檔名稱
- bcachetime :區塊快取週期,有效快取時間。
- last_modified:最後修改時間
新版xoops_newblocks
- bid :區塊編號
- mid :隸屬模組編號,1代表系統。-1代表無主。
- options :運作參數;顯示秀圖;秀圖寬度;
- name :區塊中文名稱(xoops命名)
- c_type :內容類型,H,HTML;S,php Script;S,自動格式(啟用臉譜);T,自動格式(關閉臉譜)
- isactive :可否區塊管理
- dirname :函式檔所在之資料夾,以xoops網頁根目錄的相對路徑。
- func_file :函式所在程式檔名。
- show_func :顯出函式。
- edit_func :編輯函式。
- template :區塊樣版檔名稱
- last_modified:最後修改時間
新版xoops_block_instance
- instanceid :顯示區塊編號
- bid :區塊編號
- options :運作參數;顯示秀圖;秀圖寬度;
- title :區塊中文抬頭(使用者命名),預設值同name
- side :位置,0-4代表左、中、右
- weight :順位
- visible :是否顯示。
- bcachetime :區塊快取週期,有效快取時間。
取消
- func_num :在模組之下的次編號
- content :區塊原始碼,text型,最大65535位元組。
- block_type :S或M。S,由函式套Smarty產生內容;函式所在處由以下各欄決定,使用者不能編內容。
(三)使用者xoops_user_profile可變動欄位
- xoops_user_profile 每位註冊者的個人資料
- xoops_user_profile_fieldcontent 上表各欄之說明
- xoops_profile_fieldcategory 站長自訂欄位與自訂類別的關係資料表
- xoops_profile_category 站長自訂之欄位類別
預設之xoops_user_profile欄位
- umode 評論顯示模式
- uorder 評論排序方式
- notify_method 通知方法
- notify_mode 預設通知模式
- user_regdate 註冊日期
- posts 張貼數
- attachsig 附上簽名檔
- timezone_offset 時區
- user_mailok 是否要接收通知信
- theme 版面風格
- actkey 使用者啟動碼
- last_login 最後登入時間
pm所加之xoops_user_profile欄位
- 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欄位
- user_aim AIM
- user_icq ICQ
- user_from 居住地
- user_sig 簽名
- user_viewemail 使用者可以看到我的電子郵件位址
- user_yim YIM
- user_msnm MSN
- bio 額外的資訊
- user_intrest 興趣
- user_occ 職業
- url 個人網站
- newemail 新的電子郵件
- xxxx 其他站長自訂欄位
(四)錯誤
- 模組更新或拆除時會誤刪別的樣版,所以要常備份xoops_tplfile和xoops_tplsource。
- pm模組指定pm_lookup.html樣板,卻沒有此html檔,使xoops_tplfile比xoops_tplsource每樣板組都多出一筆。
- xoops_group_permission中管理員對系統模組有1個模組管理權、三群組對系統模1個模組皆有使用權,共4個權限,但此4個權限被重覆兩次變成8個權限。此重覆在更新權限設定時,會自然修正,不必刻意處理。
伍、外觀(布景)
一、基本說明:
┌────────────┐ ┌──────────┐
│include "mainfile.php"; │ │套上選用的theme.html│
│include "header.php"; │ │套上選用的style.css │
│ ┌──────────┤ │ ┌────────┤
│ │自設的php碼或html碼 │=>│ │ 產生「內容區」 │
│ └──────────┤※│ └────────┤
│include "footer.php"; │ │ │
└────────────┘ └──────────┘
xxx.php http輸出
- ※
- 按帳號決定群組。
- 模組各支程式從內容區輸出。所以一次只能執行一模組中的一程式。
- 按群組、現行模組、區塊是否顯示設定,選出可用區塊。
- 產生區塊並套區塊樣版。
- 將區塊分五組塞入五個區塊放置區。組內區塊按順位排序。五組區塊群和五個區塊放置區可任意配對。
- 按theme.html擺放頂區、主區(五個區塊放置區)、尾區,並按style.css修飾各區外觀。
- 在themes下,一個子目錄一個布景。可以有多個布景,但一次只能有一個布景起作用。。
- 子目錄中的theme.html+style.css控制所有區塊放置區的頁面。左、右、中左、中右、中中五區塊放置區即使各有設定,也是整合進theme.html中。
- 布景檔由「樣版」和圖組成,由Smarty template engine解成/templates_c/default^theme.html。
- 修改布景期間請將「系統/偏好/一般設定」中將「要由版面風格/您的版面風格/樣版目錄中來更新模組樣版.html檔嗎?」設為是,以停用快取。快取其實感覺不出來。
二、簡易改畫面:
- 左上/themes/default/logo.gif,換成我們的圖。改theme.html,找到logo.gif換成我們的圖。
- xoops_banner資料表中,imageurl換成我們的圖。
- 常見連結:
- 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? 寄發「私人訊息」
- send=1:寄「私人訊息」。
- send2=1&to_userid=某人:發「私人訊息」給某人。
- reply=1&msg_id=某私人訊息:針對某私人訊息回信,自動帶入「給:」、「Re:主旨」、前私人訊息之「訊息內容:」。
- 不明
- banners.php 不明,只知與廣告管理有關
- misc.php
- pda.php
- image.php
三、翻譯:
- 中日:http://www.excite.co.jp/world/chinese/
- 中英:http://www.systranbox.com/systran/box/
四、修改theme.html:
(一)結構與內容:
- head
- 字集、語言、機器人、關鍵字、描寫。
- 作者、版權。
- rating、generator
- 抬頭
- favicon.ico
- 兩個css:xoops.css、布景下style.css
- xoops.js
- default
┌─────┬──────┐
│headerlogo│headerbanner├┐
├─────┴──────┤tr:header
│headerbar ├┘
└────────────┘
┌─┬────────┬─┐
│ │中(有才秀) if │ │
│ │ ┌─────┐ │ │
│左│ │ 中中 │ │右│
│ │ ├──┬──┤ │ │
│ │ │中左│中右│ │ │
│ │ └──┴──┘ │ │
│ │ 內容區(div)/if │ │
└─┴────────┴─┘
┌────────────┐
│ │tr:footerbar
└────────────┘
- 頂區(header)
- headerlogo:/themes/default/logo.gif
- headerbanner:xoops_banner資料表中的imageurl
- headerbar:空白
- 主區
- 左區(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
- 底區(footerbar):布景之poweredby.gif
- 頂區、尾區無法用區塊控制。一定會帶出來。但可自由設計。
- 內容放置區本質是td,:之後是放置區所要放置的區塊。
- 區塊本質是div,不是區塊放置區。class名稱為blockContent。
- 內容區本質是div,class名稱為Content。
(二)default布景中的各放置區樣版:
- theme_blockleft.html :blockTitle、blockContent
- theme_blockcenter_c.html:用fieldset包legend秀有區塊抬頭邊框,內放區塊內容。
- theme_blockcenter_l.html:同上。
- theme_blockcenter_r.html:同上。
- theme_blockright.html :blockTitle、blockContent
(三)用文字編輯器編:
- 註解用<!-- 說明 -->,說明前後需有空白。
- <!-- 在中欄品字三欄之下放內容區 -->,這段big5註解在utf-8字網頁中,IE5.5、ie6會破壞標記,firefox不會。最好在utf-8網頁中不要用big5註解。
- <fieldset>內容</fieldset>會將內容用框線包起來,在<fieldset></fieldset>之中找到第一個<LEGEND>框線抬頭</LEGEND>,將做為此方框框線的抬頭。
(四)用網頁編輯器:
- Dreamweaver MX2004中文版,不會去亂動程式碼。其他會將 smarty 的角括號<>改成代碼&lt;&gt;。
- 進行替換:
- <{$xoops_url}>=>「../..」或「http://localhost」或絕對徑「網頁根/themes/自訂布景/」。最後不加/。
- <{$xoops_theme}>=>「自訂布景名稱」
- <{$xoops_themecss}>=>布景css檔位置「../../themes/自訂布景/style.css」或「style.css」
- <{$xoops_charset}>=>「Big5」或「utf8」
- 這樣可以解出大致的圖文效果,其他免改。
- 將圖放入布景目錄下,插入theme.html。
- 換回Smarty標籤:
- 「字集」=><{$xoops_charset}>
- 「css檔」=><{$xoops_themecss}>
- 「自訂布景名稱」=><{$xoops_theme}>
- 「xoops根目錄」=><{$xoops_url}>
- 「&lt;&gt;」=>< >
五、修改css:
(一)根目錄xoops.css:
- 圖無邊。
- #隱藏文字
- pag原色、作用、不作用。
- 主選單連結:連結、已連結、選單頭、選單中、次選單。
- 使用者選單連結:連結、已連結、選單頭(保留未設)、選單反白。
(二)default布景中的style.css:
- body
- table
- table td
- th
- a
- h1-h5保留未設。
- ul
- li
- 按鈕(input.formButton)保留未設。
- 項目(.item):設13項。
- 廣告區(headerbanner)
- 頂區邊界(headerbar)
- headerlogo沒出現
- 左區:左區、th、div.blockTitle、div.blockContent
- 中區:中區、th
- 中中區:中中區、legend.blockTitle、div.blockContent
- 中左區:中左區、legend.blockTitle、div.blockContent
- 中右區:中右區、legend.blockTitle、div.blockContent
- 內容區
- 尾區
- 主選單連結:連結、已連結、選單頭、選單中、次選單。
- 使用者選單連結:連結、已連結、選單頭、選單反白。
- 外、頭、尾、奇、偶(.outer、.head、.foot、.even、.odd)。
- 奇、偶td
- 錯誤訊息、確認訊息、結果訊息。
- xoops碼、xoops引述。
- .com之抬頭、文字、使用者靜止、使用者靜止標題、使用者狀態、使用者歸類、使用者歸類文、使用者歸類圖、使用者名稱、使用者圖、日期、日期標題。
(三)Box Model:
- Box Model
┌───────────┐
│┌─────────┐│
││┌──────┐ ││
│││┌────┐│ ││
││││content ││ ││
│││└────┘│ ││
│││ padding │ ││
││└──────┘ ││
││ border ││
│└─────────┘│
│ margin │
└───────────┘
- width 和 height 是 content 的寬和高,而沒有包含 border 和 padding 。
- IE5/5.5 時代,一個元素的寬高則包含了 content + padding + border 。這個錯誤的實作由Box Model Hack提供了解決之道。
- 元素上色的部份,除了有特別說明外,都是包含 border + padding + content ,這點非常重要!因為除了 body 標籤外,元素的 background 屬性的作用都不會包含 margin。
- 設定背景色時, Firefox 則是作用在 border + padding + content 上,正確。 IE 是作用在 padding + content ,不良。
- 沒有指定元素的寬高時,那麼該元素的內容就會受到 padding 所擠壓。有行內顯示元素時,我們可以利用 padding 的設定來讓它們在我們想要的地方折行,而不用對 content 指定寬度。
- 行內顯示元素緊鄰而沒有階層關係,它們的邊界距離就是「左元素」的 margin-right 加上「右元素」的 margin-left 。
- 區塊顯示元素緊鄰,前後會加入換行,它們的邊界距離是重疊的!而當「上元素」的 margin-bottom 大於「下元素」的 margin-top 時,上下元素的實際距離就以「上元素」的 margin-bottom 為準。
- 父子元素
┌─────┐┐
│┌───┐││
││子元素││父元素
│└───┘│content
│ margin ││
└─────┘┘
- IE6 就算指定了父元素的 height ,如果子元素的高度超過父元素的 height ,父元素就會被撐大,然後保留子元素 margin-bottom 的空間;而 FireFox 就不會。
- 「元素與元素間緊鄰」時,我們將 margin 設定為負值,會使得 margin 設定為負值的元素「疊」到另一個元素上 (不過還是要視另一個元素所設定的邊界距離而定) 。例如,我們將 A 區塊的 margin-bottom 設為 0 , B 區塊的 margin-top 設為 -10px ,那麼 B 區塊的文字就會疊到 A 區塊的文字上。
- 「元素間有階層性關係」時的關係,如果子元素的所指定的 margin 負值的絕對值大於父元素的 border + padding 時,就會使得子元素跑到父元素的外部去了。詳見圖BoxModel_files/margin4.png。
- 浮動請見Float。
六、marriage布景:
(一)修改marriage布景中的theme.html:
- 修改頂區,去掉所有id,改成圖底放文。
- 修改底區,去掉所有id,成寫信求救。
- 設計要用中中、中左、中右三放置區成品字,刪左、右區。將中中、中左、中右樣版改寫入theme.html,並去除抬頭邊框。
- 內容區改放中中放置區。
- 設計一
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
- 設計二(區塊數最少)
div 調中
┌寬602 ────────┐
│高82:底圖秀字 │
├───────────┤
│高28:三連結 │
├───────────┤
│td寬602:centerCcolumn │
│ if有中組區塊要秀 │
│ 諸中中組區塊 │
│ /if │
│ div:ccontent │
│ 內容區/div │
├───────────┤
│高40:求救連結 │
└───────────┘
/div
(二)修改marriage布景中的style.css:
- 改td#headerbanner和body同底色。
- 改所有表格撐滿畫面,將table中的width:100%;拿掉。
- 改中中、中左、中右的基本設定。
- 設定二的重點在中中組諸區塊和內容區是上下緊鄰元素,其距離為兩者的下上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之區塊樣版不准修改。
(五)造四區塊:
- marriage0中中,順位0,所有頁面。
- marriage1中左,順位0,首頁。
- marriage2中右,順位0,首頁。
- marriage3中右,順位1,首頁。
(六)調區塊:
- 主選單不顯示。
- 使用者不顯示。
- 登入改不顯示。
(七)上傳布景marriage布景目錄。
(八)上傳諸php到marriage子目錄。
(九)偏好設定,選marriage布景、marriage樣版。不快取。
(十)群組中,讓訪客對三區塊有權限。
(十一)上傳camp、room、cabin三資料表。
陸、將內容嵌入xoops
一、嵌入自訂網頁:
- 造檔
<?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"; //載入檔尾,一定要有,不然網頁帶不出來
?>
- 把上檔之連結<a href="{X_SITEURL}/自訂目錄/自訂網頁.php">說明</a><br>放入自訂區塊的「內容」中。
注意{X_SITEURL}是常數。
- 到「系統/群組」中,將區塊使用權限開給訪客。
二、在主選單中插入連結:
- 造檔同上
- 「系統/樣版」中選default之複本。命名為自訂的樣版組。
- 「系統/偏好設定/一般設定」,預設樣版組選自訂的樣版組。
- 「系統/區塊」中編輯主選單區塊,編輯樣版。其二層選項在<!-- start module menu loop -->和<!-- end module menu loop -->之間,
在其前或其後加上自訂的連結「<a class="menuMain" href="<{$xoops.url}>/jjxoops/自訂目錄/自訂網頁.php">說明</a><br>」
其中<{$xoops.url}>代表網址,不是xoops所在目錄,而且是變數不是常數,這樣網址改變才不必改模組。
三、插入外部網頁:
- 使用時機:無法取得原始碼、原始碼常變動、原始碼太複雜。
- 造檔 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"; //載入檔尾
?>
- 將「<a class="menuMain" href="<{$xoops.url}>/jjxoops/get_url.php?urladdress=目的地">說明</a><br>」嵌入主選單區塊樣版中。
- 或造 instpage.php (在光碟目錄3)和mainfile.php放同目錄,將「<a class="menuMain" href="<{$xoops.url}>/jjxoops/instpage.php?r=顯隱&w=寬度&h=高度&url=目的地">說明</a><br>」嵌入主選單區塊樣版中。
四、使用內容管理模組(暫略):
柒、模組架構
○、模組概說:
- 模組是一組有特定功能的php,所以出輸出於「內容區」。
- 諸php的連結出現在主選單中。
- 其管理介面出現在「管理員選單」中。
- 是個區塊顯示選項,任一區塊可以選擇出現於「首頁」「所有頁面」「某模組」。
- 其內附的區塊可以出現在其他模組中。
- 有用的模組:newbb討論區,eguide活動報名,xcgal網路相簿,fileup檔案文件櫃,tadbook2線上書,WordPress部落格,共筆暫無好用者。
一、xoops modules 主要目錄及檔案:
- xoops_version.php 檔案 : 模組定義檔,這個檔案為xoops 模組的核心設定,透過這個檔案的設定,我們寫的模組才能以xoops 安裝模組的方式安裝。
- index.php : 模組首頁程式
- admin 目錄 : 管理程式存放目錄
- blocks 目錄 : 區塊程式存放目錄
- images 目錄 : 模組圖檔存放目錄
- 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。
- sql 目錄 : 模組資料表存放目錄
- templates 目錄 : 模組樣版檔存放目錄
二、以docman模組為例:
- 造xoops_version.php : 但其中的值用 _MI_DOCMAN_XXXX 表示。
- 在語系檔modinfo.php中定 define("_MI_DOCMAN_XXXX","某語系字串");
- 製作一個模組的logo圖檔到 images 下,並在xoops_version.php中以$modversion['image']指示路徑檔名。
- 寫index.php入口,導向其中一個功能upload.php。
- 寫功能php及其對應之樣版。並在xoops_version.php中以$modversion['templates'][幾]['file']指示樣版檔。
- 寫mysql.sql,可由phpMyAdmin產生。並在xoops_version.php中以$modversion['sqlfile']['mysql']指示sql檔,以$modversion['tables'][幾]指示資料表
- 在/模組/blocks中加入區塊php內含秀function,該function最後return $block;在/模組/templates/blocks加樣版檔在其中{foreach from=$block};在xoops_version.php中以$modversion['blocks'][幾]['xxxx']指示區塊php、抬頭、說明、秀function、樣版檔。
- 在xoops_version.php中以$modversion['sub'][幾]['name'],$modversion['sub'][幾]['url']建子選單。
- 加評論功能:
- 從news(新聞)官方模組中拷comment_new.php,comment_delete.php,comment_edit.php,comment_post.php,comment_replay.php五程式到模組目錄,不修改。
- 在xoops_version.php中以$modversion['hasComments'] = 1;指示有評論;以$modversion['comments']['pageName']指示掛評論的檔;以$modversion['comments']['itemName']指示評論的key欄。
- 在樣版中掛入評論,參看docman_sel.html。
- 加搜尋功能:
- 啟用「搜尋」區塊。
- 在xoops_version.php中以$modversion['hasSearch'] = 1;指示能搜尋;以$modversion['search']['file']指示搜尋函式所在檔;以$modversion['search']['func']指示搜尋函式名稱。
- 模組下建include目錄。
- 從news(新聞)官方模組中的include目錄拷search.inc.php到本模組的include目錄。
- 改search.inc.php十個地方:函式名(2)、選取資料表及欄位(4)、造搜尋字串(9)、造搜尋字串(12)、定排序(16)、放小圖(21)、搜到檔案如何連結過去(22)、搜到檔案之標題(23)、搜到檔案之時間戳記(24)、搜到檔案之發布者(25)
- 加管理介面:
- 在xoops_version.php中以$modversion['hasAdmin'] = 1;指示能通知;$modversion['adminindex'] = "admin/index.php";指示管理介面程式;$modversion['adminmenu'] = "admin/menu.php";指示管理介面選單。
- 模組下建admin目錄,下建index.php,menu.php兩檔。
- menu.php中每一選項,定兩個陣列元素值:$adminmenu[幾]['title']放選項名,$adminmenu[幾]['link']選項連向那一支php,如admin/index.php。幾,從0編起。
- index.php中先include xoops之下include/cp_header.php,呼叫xoops_cp_header(); xoops_cp_footer(),在兩者之間放入主要部分。
- 加偏好設定,就是在xoops_config中加一筆資料:
- conf_id :流水號,每更新一次模組,就將舊設定刪除,產生新的流水號。
- conf_modid :模組編碼。
- conf_catid :設定分類編碼,分六類。模組編號設定常為無類,值0。
- conf_name :設定之變數名,由$modversion['config'][n]['name']取得。
- conf_title :設定之抬頭,由$modversion['config'][n]['title']='常數名';取得。考慮到多國化,要派入「常數名」而不是常數值,所以常數名必須加引號。
- conf_value :設定值。$modversion['config'][n]['default']派入預設值。
- conf_desc :設定之說明,由$modversion['config'][n]['description']='常數名';取得。考慮到多國化,要派入「常數名」而不是常數值,所以常數名必須加引號。
- conf_formtype :分文字框(textbox)、大量文字框(textarea)、選單(select)、複選選單(select_multi)、是否(yesno)、單選群組(group)、複選群組(group_multi)七種。由$modversion['config'][1]['formtype']取得。
- conf_valuetype:分文字(text)、整數(int)、浮點數(float)、陣列(array)或其他型態
- conf_order :排序。由n決定。
- 由$modversion['config'][n]['options']=array('key'=>value,'key'=>value…);決定選單項目。
- 引用設定值$xoopsModuleConfig['設定之變數名'],用於php中。
- 模組加入評論功能會生出「評論規則」及「允許匿名發表評論嗎?」兩項偏好設定。
- 加通知功能:
- 在xoops_version.php中以$modversion['hasNotification'] = 1;指示能通知
- 樣版信可用標籤,見10-50頁
-
-
捌、官方或有用模組
一、系統模組:
(一)管理目錄下諸目錄,每一目錄管一系統管理介面設定項:
- 評論 comments
- 寄信給使用者 mailusers
- 模組 modulesadmin
- 區塊 blocksadmin
- 偏好設定 preferences
- 圖片管理 images
- 群組 groups
- 頭像管理 avatars
- 尋找使用者 findusers
- 編輯使用者 users
- 樣版 tplsets
- 使用者等級 userrank
- 表情符號 smilies
- 廣告 banners
- 版本 version (執行結果是Access Denied)
(二)諸樣版:
甲、2.0.1x官方模組
二、討論區模組:
- 新增分類。
- 新增討論版:名稱、簡介必填,版主必選。
- 討論版之下,分主題(文章)。
- 發表新文章(主題)及回應。
- 由上方「主頁/討論區/主題」,可以移到動要發言的地方。
- 下方四按鈕,可將某一主題「上鎖,不准回應」「移到其他討論版」「刪除」「固定於本版頂端」
- 每編發言有刪除鈕,可刪該發言。
- 整個主題有刪除鈕,刪整個主題。
- 私人討論版在建版時選私人區域。然後進「討論區設定/私人討論版權限設定」,指定該版的使用者。
- 「討論區設定/討論版主題索引同步化」重做主題索引。當討論區怪怪的,對不太起來時就重做索引。
三、FAQ:
- 新增分類。
- 分類下,可增加一對一對的問與答。
四、夥伴網站:
- 加上友站的圖連結(通常直接用該站的圖)
- 加上該站的url。
五、群組管理:
- 預置三群組:站務管理者、註冊會員、訪客。
- 可自訂群組。
- 每一群組各自設模組使用權限、區塊使用權限;模組管理權限、系統管理權限。
六、區塊管理:
- 先指定頁別(如首頁)、身份別(如訪客),會秀出所有可用區塊。
- 「編輯」可指定該區塊可顯示於那些頁面中。
七、精華文章:
- 一定要有代表圖。
- 圖放到/modules/sections/images/。
八、投票:
- 設定題目、說明、選項。
- 同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 | | | 孟君
|
玖、系統常數、變數、函式、物件
一、載入程序:
- mainfile.php
- 定義諸常數
- 拒絕執行xoops路徑以外的命令稿
- 載入common.php
- common.php
- 檢查XOOPS_MAINFILE_INCLUDED是否存在,存在才往下做
- 載入/class/xoopssecurity.php,造$xoopsSecurity,將其設為全域,用checkSuperglobals()方法檢查超級全域變數。
- ## Activate error handler ##,載入/class/errorhandler.php,造$xoopsErrorHandler
- 定義諸常數
- set_magic_quotes_runtime(0);
- 載入/class/logger.php,造$xoopsLogger
- ## Include common functions file ##,載入常用函式/include/functions.php
- ## Include required files ##,載入系統核心物件/kernel/object.php及資料庫命令處理函式/class/criteria.php
- ## Include text sanitizer ##,載入字串過濾物件/class/module.textsanitizer.php
- 轉換$_SERVER陣列
- 定義諸常數
- ## Connect to DB ##,載入/class/database/databasefactory.php,造資料庫連接物件$xoopsDB
- ## Load Config Settings ##,載入xoops_gethandler('config'),造系統設定物件$config_handler,以其getConfigsByCat(XOOPS_CONF)方法,自資料庫取得系統相關的參數放入 $xoopsConfig 陣列
- ## Error reporting settings ##,載入,造
- ## Include version info file ##,載入,造
- ## Include site-wide lang file ##,載入載入語系檔,如果沒有找不到 $xoopsConfig['language'] 定義的語系,就用預設的 english
- ## Include page-specific lang file ##,載入特別定義的語系檔
- ## Include local string/encoding handler file ##,載入,造
- ## Login a user with a valid session ##,取得登入使用者權限,利用 session 值來判斷
- // Instantiate Theme object,載入/class/theme.php,造$xoopsTpl及$xTheme
- //,如果關站如何處理
- 無模組時如何處理
- 記日誌 ($xoopsLogger->context = "module";)
- header.php 主要在取得各區塊
- 記日誌 ($GLOBALS['xoopsLogger']->context = "core";)
- 造區塊控制物件 (非全域)
- 取得各區塊 ($block_handler->assignBlocks();)
- 檢查快取 ($GLOBALS['xTheme']->checkCache();)
- 如果還未設內容區樣版,則進行載入與設定,處理不用樣版檔的舊式模組
(載入/include/old_theme_functions.php;) ,補上OpenTable(),CloseTable(),themecenterposts()三函式的定義。
($xoopsTheme['thename'] = $GLOBALS['xoopsConfig']['theme_set'];)
- 記日誌 ($GLOBALS['xoopsLogger']->context = "module";)
- footer.php
- 準備樣版中 $xoops_notification 陣列的諸元素值。
- 以'db:'.$xoopsOption['template_main']或空值為內容區樣版。
- 如果http head還沒送出,由header()輸出字集 (header('Content-Type:text/html; charset='._CHARSET);)
- 送出內容區樣版及頁樣版,造出頁面( $GLOBALS['xTheme']->display($template);)
- 如果 $xoopsConfig['debug_mode'] 含 2,且有權限,送出日誌中的sql錯誤及警告 (echo $xoopsLogger->getSQLDebug();)
- xTheme->display(內容區樣版,頁樣版,樣版變數群)
- 準備樣版檔中的諸樣版變數值。
- 載入語言檔。
- 如果參數指定了樣版變數群,送入樣版。
- 取用模組的CSS。
- 派入諸*.js。
- 派入$xoopsOption["xoops_pagetitle"]和$xoopsOption["xoops_module_header"]
- 將內容區加入頁樣版 ($this->tplEngine->assign( 'xoops_contents', $content );)
- 如 $xoopsOption['output_type'] == "plain" ,頁樣版取用 system_plain.html
- 非 $xoopsOption['output_type'] == "plain"
- $xoopsOption['pagetype'] == "admin" ,頁樣版取用 themeadmin.html
- 其他的情形,頁樣版取 布景路徑中的 預設檔 (theme.html)
- 用樣版引擎把頁樣版輸出 ($this->tplEngine->display( $tpl );)
二、常數:
- "XOOPS_MAINFILE_INCLUDED",1:是否載入mainfile
- 'XOOPS_ROOT_PATH',路徑:xoops所在
- 'XOOPS_URL',url:xoops所在url
- 'XOOPS_CHECK_PATH',1:對抗外來執行稿
- 'XOOPS_DB_TYPE','mysql'
- 'XOOPS_DB_PREFIX',前置字
- 'XOOPS_DB_HOST','localhost'
- 'XOOPS_DB_USER',資料庫帳號
- 'XOOPS_DB_PASS',密碼
- 'XOOPS_DB_NAME',資料庫名
- 'XOOPS_DB_PCONNECT',0:非持續連結
- 'XOOPS_GROUP_ADMIN','1'
- 'XOOPS_GROUP_USERS','2'
- 'XOOPS_GROUP_ANONYMOUS',3
- …
- "SMARTY_DIR", XOOPS_ROOT_PATH."/class/smarty/"
- …
三、全域變數:(以前置字kpfood為例)
(一)超集全域變數:1個
- $GLOBALS
(二)通道:15個
- $HTTP_POST_VARS 及 $_POST :
- $HTTP_GET_VARS 及 $_GET :
- $HTTP_COOKIE_VARS 及 $_COOKIE :放 [PHPSESSID],不同客戶不同值
- $HTTP_SERVER_VARS 及 $_SERVER :來自Apach
- $HTTP_ENV_VARS 及 $_ENV :來自作業系統
- $HTTP_POST_FILES 及 $_FILES :
- $HTTP_SESSION_VARS及 $_SESSION:來自[PHPSESSID]鑑別諸客戶各自的變數
- $_REQUEST :
(三)單一值:2個
- $xoopsRequestUri => /modules/kpfood/test6.php
- $xoopsUserIsAdmin => 1(布林值)
(四)陣列:3個
- $xoopsConfig(8-63~66):整體性一般設定陣列。kpfood_config表中,conf_modid=1且conf_catid=1,每一筆$xoopsConfig[conf_name欄之欄值]得出conf_value欄之欄值。如
- $xoopsConfig[sitename]:站台名稱。
- $xoopsModuleConfig:此模組偏好項目設定值。xoops_version.php中以$modversion['config'][n]=array('name'=>項目代名,…)設第n項偏好的項目代名,對應用$xoopsModuleConfig['項目代名']取出此設定項目之設定值。
- $xoopsOption :頁面及布景資訊陣列。
- $xoopsOption['theme_use_smarty']設為1布景使用smarty
- $xoopsOption['nocommon']設為1則不載入common.php,此時純粹用header()輸出,僅用於「image.php?id=圖編號」輸出圖檔。
- $xoopsOption['output_type']
- 'plain' system_plain.html 極簡布景,只有「內容區」,配合header.php及footer.php,載入xoops.css,xoops.js,主theme之style.css
- 非'plain'看$xoopsOption['pagetype']
- $xoopsOption['pagetype']使用顯示介面,可設為
- 'admin'後台管理。頁樣版使用各布景之themeadmin.html,沒有則用預設。配合cp_function.php的xoops_cp_header()和xoops_cp_footer()
- 'main'主布景。未設$xoopsOption['pagetype']時,common.php自動給為'main',而$xTheme->display()中,只要非admin且沒給頁樣版參數,一概取用預設主樣版。
- 如果只配合mainfile.php而沒有header.php和footer.php,則只有該php的輸出,沒有布景。
- 如果只配合mainfile.php而沒有header.php只有footer.php,則取用theme.html並套入內容區,而沒有任何區塊。
- 有PHP將$xoopsOption['pagetype']設為以下各值,但完全沒作用。或許以後會用。
- 'notification'。notification.php(通知)。
- 'user'。user.php(使用者登入)及lostpass.php(忘記密碼)。
- 'search'。search.php(蒐尋)。
- $xoopsOption['template_main'] = '內容區樣版檔';之後footer.php會將其交給 $xTheme->display() 內容區樣版參數(第一個值)。
- $xoopsOption['show_cblock']設為1則選出在最上層頁面的所有區塊,即 _block_module_link 表中,module_id=0而pageid=1者。
- $xoopsOption['xoops_pagetitle'] 給一般布景及極簡布景內嵌於title標籤中 <{$xoops_pagetitle}> 的值
- $xoopsOption['xoops_module_header'] 給一般布景及極簡布景內嵌於head標籤中 <{$xoops_pagetitle}> 的值
- $xoopsOption['cache_group'] 諸group連成字串,暫無作用
(五)物件:12個
(六)物件詳述:
- 形成物件:kernel/類別名.php內放 Xoops類別Handler 的類別定義 =>由include/function.php中xoops_gethandler函式轉化為物件,物件名自由命名,如$物件名 = xoops_gethandler函式;
kernel下共有如下的 Xoops類別Handler 類別定義檔。數字為系統管理值。
- group.php 1群組
- groupperm.php 群組權限
- member.php
- user.php 2使用者
- config.php 3偏好設定
- configcategory.php
- module.php 4模組
- block.php 5區塊
- blockinstance.php 現用區塊
- image.php 9圖片
- imageset.php
- imagesetimg.php
- imagecategory.php
- avatar.php 10頭像
- rank.php 11使用者等級
- tplset.php 15樣版組
- tplfile.php 樣版
- comment.php 14評論
- notification.php 通知
- online.php
- session.php XoopsSessionHandler類別
- editor.php 載入/class/xoopseditor/xoopseditor.php,進而定義XoopsEditorHandler類別。
- profile.php 使用者管理模組
- profilefield.php
- privmessage.php 私人訊息模組
另有四個基本物件定義
- object.php 定義物件11種資料型態,定義所有物件的基本類別 XoopsObject
- configoption.php 定義XoopsConfigOption類別,用以延伸 XoopsObject
- configitem.php 定義1;3;4;5;6;7類設定類別,用以延伸 XoopsObject
- handlerregistry.php 定義XoopsHandlerRegistry類別
其他
- themeset(6)有呼叫而沒有相關的類別定義php。
- 以下四個系統管理值,既無呼叫也沒有相關的類別定義php:FINDU (尋找使用者)7、MAILU (寄信給使用者)8、SMILE (表情符號)12、BANNER (廣告)13
- 核心物件:
- $xoopsDB :資料庫物件。以$xoopsDB =& Database::getInstance(); 造出$xoopsDB物件。取class/database/database.php中的Database類別new物件時,先執行其中getInstance(取實例)方法。
- $xoopsDB->prefix("xxx") 在xxx之前加前置字串,傳回新字串
- $xoopsDB->query("sql命令字串") 執行sql命令,傳回執行結果
- $result=$xoopsDB->query("sql命令字串") or redirect_header(欲導向的位置,秒數,"錯誤訊息"); 執行sql命令,若失敗秀錯誤訊息並轉向另一頁
- $xoopsDB->getRowsNum(結果id) 取回筆數
- $xoopsDB->getInsertid() 取回最後新增的編號
- $xoopsDB->fetchArray(結果id) 劈下一筆資料並以一維字串索引陣列傳回,
- $xoopsDB->fetchrRow(結果id) 劈下一筆資料並以一維註標索引陣列傳回,
- $config_handler:系統設定物件。得自config.php。
在/kernel/configitem.php中
define('XOOPS_CONF', 1);
// define('XOOPS_CONF_USER', 2);
define('XOOPS_CONF_METAFOOTER', 3);
define('XOOPS_CONF_CENSOR', 4);
define('XOOPS_CONF_SEARCH', 5);
define('XOOPS_CONF_MAILER', 6);
define('XOOPS_CONF_AUTH', 7);
而modules/profile/xoops_version.php中設$modversion['configcat'][2]['nameid'] = 'user';
所以可用$xoopsConfig =& $config_handler->getConfigsByCat(XOOPS_CONF);或
$xoopsConfig =& $config_handler->getConfigsByCat(1)造系統一般設定值陣列。
也可用$config_handler->getConfigsByCat(0,$module->getVar('mid'))造現用模組設定值陣列。
- $config_handler->insertConfig(設定值物件):設定項目插入資料表
- $config_handler->deleteConfig(設定值物件):自資料表刪除設定項目
- $config_handler->getConfigs(含conf_name IN 諸設定名之物件):依指定的conf_name取回諸設定值物件。
- $config_handler->getConfigOptions(含conf_id IN 諸設定代碼之物件):依指定的conf_id取回該設定項目諸選項。
- $config_handler->getConfigsByCat(類別代碼,模組代碼):依設定類別代碼及模組代碼,造設定值陣列。類別代碼為0,代表所有類別;模組代碼省略,代表所有模組。
- $xoopsUser:登入之使用者物件。得自user.php。未登入者不能使用 $xoopsUser->getVar 方法,請先用 $xoopsTpl->_tpl_vars['xoops_isuser'] 檢查是否登入。
重要屬性:
- _groups :陣列值為所隸諸群組
- _isAdmin :陣列值僅一元素其值為是否管理員
- vars :二維陣列,代表users表諸欄,第一維是欄名,第二維(每欄)有value,required,data_type,maxlength,changed,options六值,是標準的 xoopsObject
- _profile->vars:二維陣列,代表profile表諸欄,第一維是欄名,第二維(每欄)有value,required,data_type,maxlength,changed,options六值,是標準的 xoopsObject
用 getVar('欄名') 取得使用者欄位之值
- $xoopsUser->getVar('uid') :使用者編號
- $xoopsUser->getVar('uname') :使用者帳號
- $xoopsUser->getVar('name') :使用者真實姓名
- $xoopsUser->getVar('email') :使用者email
- $xoopsUser->getVar('user_avatar'):使用者頭像
- $xoopsUser->getVar('pass') :使用者密碼md5編碼
- $xoopsUser->getVar('rank') :使用者等級
- $xoopsUser->getVar('level') :使用者階級(1是會員,2是管理者,5是站長)
- $xoopsUser->getVar('欄名') :使用者在users及user_profile兩表中的欄值
- $xoopsModule:目前使用模組之物件(不能用於區塊中)。得自module.php。
- $xoopsModule->getVar('mid') :模組編號
- $xoopsModule->getVar('name') :模組名稱
- $xoopsModule->getVar('version') :模組版本
- $xoopsModule->getVar('last_update'):最後更新日期
- $xoopsModule->getVar('weight') :出現順序權重
- $xoopsModule->getVar('isactive') :是否啟用
- $xoopsModule->getVar('dirname') :目錄名稱
- $xoopsModule->getVar('hasmain') :是否有使用者介面
- $xoopsModule->getVar('hasadmin') :是否有管理介面
- $xoopsModule->getVar('hassearch') :可否蒐尋
- $xoopsModule->getVar('hasconfig') :是否有偏好設定
- $xoopsModule->getVar('hascomments'):是否有評論功能
- $xoopsModule->getVar('hasnotification'):是否有通知功能
- $xoopsTpl :樣版物件。得自class/template.php中類別 XoopsTpl 延伸於 Smarty。
- 載入 header.php 時,會建立 $xoopTpl 物件
- $xoopsTpl->display('db:樣版檔'); // ?
- $xoopsTpl->assign('title', '我的標題'); // 將'我的標題' 指派到樣版檔中變數名為title者之值
(七)全域變數清單:$GLOBALS(由PHP提供)。基本的共33個含:
- GLOBALS
- HTTP_POST_VARS
- _POST
- HTTP_GET_VARS
- _GET
- HTTP_COOKIE_VARS
[PHPSESSID] => bce48b36903ed2d3c2c7154482a2f99f
- _COOKIE
[PHPSESSID] => bce48b36903ed2d3c2c7154482a2f99f
- 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
- _SERVER:同上
- HTTP_ENV_VARS
[LANG] => C
[TERM] => xterm
[PATH] => /sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin
[PWD] => /
[SHLVL] => 1
[_] => /sbin/initlog
- _ENV:同上
- HTTP_POST_FILES
- _FILES
- HTTP_SESSION_VARS
[xoopsUserId] => 31
[xoopsUserGroups] => Array
[0] => 1
[1] => 2
[2] => 4
[3] => 6
[4] => 7
[5] => 14
[xoopsUserLastLogin] => 1172453920
- _SESSION:同上
- _REQUEST
[PHPSESSID] => bce48b36903ed2d3c2c7154482a2f99f
- xoopsRequestUri => /modules/kpfood/test6.php
- xoopsUserIsAdmin => 1
- xoopsOption
[pagetype] => main
[theme_use_smarty] => 1
- xoopsModuleConfig
[KPFOOD] => 0
[com_rule] => 1
[com_anonpost] => 0
- 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
- xoopsSecurity xoopssecurity Object
[errors] => Array
- xoopsErrorHandler xoopserrorhandler Object
[_errors] => Array
[_showErrors] =>
[_isFatal] =>
- sess_handler xoopssessionhandler Object
[db]
- 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
- xoopsDB xoopsmysqldatabaseproxy Object
[conn] => Resource id #12
[prefix] => kpfood
[logger] => xoopslogger Object 同 $xoopsLogger
- 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
- 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
- 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
- module_handle xoopsmodulehandler Object
[_cachedModule_mid] => Array
[_cachedModule_dirname] => Array
[db]
[table] => kpfood_modules
[keyName] => mid
[className] => XoopsModule
[identifierName] => name
- xoopsModule xoopsmodule Object
[modinfo] =>
[adminmenu] =>
[_msg] =>
[vars] => Array modules表諸欄,每欄有value,required,data_type,maxlength,changed,options六值,如下
[cleanVars] => Array
[_isNew] =>
[_isDirty] =>
[_errors] => Array
[_filters] => Array
- 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] =>
- 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] =>
- 其他*.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)
- <{$xoops_isadmin}> :是否為管理員,有沒有管理系統模組的權限。1是,0不是。
- <{$xoops_isuser}> :是否為會員,1為會員,0為訪客。
- <{$xoops_userid}> :登入者代碼。
- <{$xoops_uname}> :登入者姓名。
- <{$xoops_method}> :登入者喜歡的通知方式。 ?
- <{$xoops_charset}> :預設字集。
- <{$xoops_langcode}>:語言。
- <{$xoops_sitename}>:網站名稱。
- <{$xoops_slogan}> :網站口號。
- <{$xoops_footer}> :頁尾文字。
- <{$xoops_pagetitle}>:該頁面標題。
- <{$xoops_version}> :xoops版本。
- <{$xoops_url}> :網站網址。
- <{$xoops_rootpath}>:網站實體根目錄。
- <{$xoops_theme}> :目前所用布景的目錄名稱。 ?
- <{$xoops_themecss}>:目前所用布景的CSS檔名路徑。?
- <{$xoops_imageurl}>:布景目錄的網址。 ?
- <{$SCRIPT_NAME}>:從XOOPS根目錄算起,請求的檔名路徑,如「modules/news/index.php」
- <{$xoops_dirname}>:所在資料夾名稱,如news。
- <{$xoops_requesturi}>:被請求的網址,如「/modules/news/article.php?storyid=1」
- <{$xoops_upload_url}>:上傳目錄網址。
- 後設六變數 <{$xoops_meta_keywords}> 、<{$xoops_meta_rating}> 、<{$xoops_meta_author}> 、<{$xoops_meta_copyright}> 、<{$xoops_meta_description}> 、<{$xoops_meta_robots}>
五、常用函式(在 include/functions.php 中定義):
- xoops_error($msg),列印錯誤訊息
- xoops_result($msg),列印結果訊息
- xoops_confirm($hiddens, $action, $msg, $submit='', $addtoken = true),訊息確認盒
- redirect_header($url, $time = 3, $message = '', $addredirect = true),網頁導向函式
- 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 物件類別
- 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 種資料類別:
- XOBJ_DTYPE_TXTBOX
- XOBJ_DTYPE_TXTAREA
- XOBJ_DTYPE_INT
- XOBJ_DTYPE_URL
- XOBJ_DTYPE_EMAIL
- XOBJ_DTYPE_ARRAY
- XOBJ_DTYPE_OTHER
- XOBJ_DTYPE_SOURCE
- XOBJ_DTYPE_STIME 短時間格式
- XOBJ_DTYPE_MTIME 中時間格式
- XOBJ_DTYPE_LTIME 長時間格式
- 保留
- XOBJ_DTYPE_FLOAT
- XOBJ_DTYPE_DECIMAL
- XOBJ_DTYPE_ENUM
- XOBJ_DTYPE_UNICODE_TXTBOX
- XOBJ_DTYPE_UNICODE_TXTAREA
- XOBJ_DTYPE_UNICODE_URL
- XOBJ_DTYPE_UNICODE_EMAIL
- XOBJ_DTYPE_UNICODE_ARRAY
- XOBJ_DTYPE_UNICODE_OTHER
XoopsObject使用了TextSanitizer物件來做字串檢查。 XoopsObject 內含25種處理變數值的基本方法,如initVar(key,資料型態)用來初始化一個變數並派入$vars[key]。
重要屬性有$vars(存放一筆資料)、$cleanVars(處理好的$var,可以直接放入資料庫)、$_isNew(是否為一個新造的物件)、$_isDirty($vars中是否有任何的值進行了修改)、$_errors(錯誤資訊)、$_filters(在子類中動態註冊附加的過濾器)。並設計了以下26個方法,操作這些屬性:
- XoopsObject :類別實體化。內容是空的,未做任何動作。
- setNew :把$_isNew設為真
- unsetNew :把$_isNew設為假
- isNew :傳回$_isNew之值
- setDirty :把$_isDirty設為真
- unsetDirty :把$_isDirty設為假
- isDirty :傳回$_isDirty之值
- initVar :初始化變數
- assignVar :給變數賦值
- assignVars :派陣列給$vars
- setVar :給變數賦值並註明是否為gpc
- setVars(陣列) :派陣列給$vars並註明是否為gpc
- destoryVars :銷毀$vars中的1或多個變數
- setFormVars(陣列,前置字):陣列中各元素之key去掉前置字後,元素放入$vars。
- getVars :傳回$vars
- getValues :丟入諸key,傳回諸值
- getVar :丟入一key,依指定型別檢查value後,再傳回value。
- cleanVars :清空所有變數的值以便進行儲存並且進行add slashes處理
- registerFilter:給類類動態掛載附加的過濾器
- _loadFilters :載入這個類別所掛載的過濾器
- loadFilters :載入本地過濾器
- xoopsClone :獲得當前物件的克隆(複製)
- setErrors :增加一條錯誤資訊
- getErrors :傳回錯誤訊息陣列
- getHtmlErrors :傳回「錯誤訊息的HTML格式」及各列間加 <br />
- toArray :傳回 $this->getValues();
(二)XoopsObjectHandler
Xoops中有各種 xxxxxHandler 類別來操作各種不同的數據,其中 XoopsObjectHandler 類別用來與資料表做映射。 XoopsObjectHandler 只是一個抽象類別,四個方法create、get、insert、delete內容都是空的,必須在其子類別中去義好實作。
XoopsObject子類中的方法是操作物件內的諸變數,而各種 Handler 中的方法則是操作整個物件。
(三)XoopsPersistableObjectHandler
XoopsPersistableObjectHandler就是XoopsObjectHandler這個抽象類的實現。一般情況下,我們寫的模組的類都要繼承這個類。其中定義了27個方法去操作資料物件。以下列舉較重要的方法:
- 產生一個新的物件:create()
- 從數據庫載入一個物件:get($id,$fields)
- 插入一個物件到數據庫:insert(&$object)
- 從數據庫中刪除物件:delete(&$object)
- 刪除所有滿足條件的物件:deleteAll(條件)
- 按照條件更新物件的一欄:updateAll(欄名,欄值,條件)
- 從數據庫中檢索物件:getObjects(條件)
- 取到所有滿足條件的物件: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(); // 輸出表單
(二)可用表單:
- themeform.php 中 XoopsThemeForm:使用theme的表格式。
- simpleform.php 中 XoopsSimpleForm:抬頭一行(加粗),接著元素一行。
- tableform.php 中 XoopsTableForm:不使用theme的表格式。
(三)可用元素:
- XoopsFormElement():元素的基本定義
- XoopsFormElementTray($caption, $delimeter=" ", $name="", $showCaptions = true):在一列中合併數個Element
- XoopsFormButton($caption, $name, $value="", $type="button", $id=""):按鈕,預設為button,可為submit或reset。
- XoopsFormLabel($caption="", $value=""):無表單元素列。$value為右方顯示文字,可用html語法。
- XoopsFormTextArea($caption, $name, $value="", $rows=5, $cols=50, $id = ""):文字區塊
- XoopsFormDhtmlTextArea($caption, $name, $value, $rows=5, $cols=50, $hiddentext="xoopsHiddenText"):文字區塊,無法離開xoops獨立執行。使用dhtmltextarea類別是xoops使用的文字區塊編輯器。
- XoopsFormEditor($caption, $name, $editor_configs = null, $noHtml=false, $OnFailure = ""):文字區塊,無法離開xoops獨立執行。和上項都是使用dhtmltextarea類別,不能併用。而且可能還沒寫好,使用上會不正常,xoops本身也沒程式引用。
- XoopsFormText($caption, $name, $size, $maxlength, $value="", $id = ""):文字
- XoopsFormCheckBox($caption, $name, $value = null, $id = ""):核取方塊組;$value是預選後送值陣列。用->addOption(後送值, "說明訊息")潻加核取方格。
- XoopsFormRadio($caption, $name, $value = null, $id = ""):Radio按鈕組;$value是預選值。用->addOption(後送值, "說明訊息")潻加核取按鈕。
- XoopsFormRadioYN($caption, $name, $value=null, $yes=_YES, $no=_NO, $id=""):01Radio按鈕組;$value是預選值。
- XoopsFormPassword($caption, $name, $size, $maxlength, $value=""):密碼。
- XoopsFormFile($caption, $name, $maxfilesize):檔案上傳。
- XoopsFormHidden($name, $value, $id=""):隱藏。
- XoopsFormHiddenToken($name = 'XOOPS_TOKEN_REQUEST', $timeout = 0):隱藏連線訊息。
- 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)可設日期的預設值。
- XoopsFormTextDateSelect($caption, $name, $size = 15, $value= 0):$value為預設值日期或其秒數,XoopsFormCalendar的子類別,只是為其設定$field_attributes['value']=strftime('%Y/%m/%d', $value);而已,完全可用XoopsFormCalendar取代。和XoopsFormCalendar混用會出包。
- XoopsFormDateTime($caption, $name, $size = 15, $value=0):$value只能用秒數,因為要決定時間選那一格。XoopsFormElementTray的子類別,合併 XoopsFormElementTray 及 XoopsFormSelect,並同時後送 name[date],name[time]兩元素構成的陣列
- XoopsFormSelect($caption, $name, $value=null, $size=1, $multiple=false, $id=""):$value為預選值,$size是顯示項目數,$multiple決定可否複選。用->addOptionArray(array('值'=>'顯示文字',…))定義諸選項。
- XoopsFormSelectCountry($caption, $name, $value=null, $size=1):選國家
- XoopsFormSelectEditor(&$form, $name="editor", $value=null, $noHtml=false):選系統可用編輯器
- XoopsFormSelectGroup($caption, $name, $include_anon=false, $value=null, $size=1, $multiple=false):選群組
- XoopsFormSelectLang($caption, $name, $value=null, $size=1):選語言
- XoopsFormSelectMatchOption($caption, $name, $value=null, $size=1):選「開始於、結束於、比對符合、內含」
- XoopsFormSelectTheme($caption, $name, $value=null, $size=1):選布景。
- XoopsFormSelectTimezone($caption, $name, $value=null, $size=1):選時區
- XoopsFormSelectUser($caption, $name, $include_anon = false, $value = array(), $size = 1, $multiple = false):選人。
- XoopsFormSelectList($caption, $name, $value=null, $size=1, $handler, $module=null):不了解其中 $handler 代表什麼意思,也查不到
calendar(jscalendar):
(一)安裝校調說明:
- 目前版本為1.0,GPL授權。諸檔說明Readme,釋出說明release-notes.html,2005.4.17,以後停止開發。
- 放在common下,給各模組共用。
- site在http://www.dynarch.com/,還提供動態選單、動態Tabs選單、動態聊天室、導航bar、web的文書處理。
- 程式(calendar.js)、設定(calendar-setup.js)、多國語言(calendar-big5-utf8.js)、外觀(calendar-system.css)分離。
- 各外觀在index.html中選看,有水紋(aqua、須圖檔)、冬天、夏天、藍系、綠系、win2K四系、標準等十種外觀。
- index.html本身就是極好的程式範例。
- 多國語言達43種,有簡中、繁中big5和繁中utf-8。
- 由於xoops的themes中設style.css為table寬100%,使jscalendar過寬,所以須在jscalendar的外觀CSS中設:.calendar {width:226;},使其寬度正常。
- 使用時叫用Calendar.setup函式,其中會以Calendar類別為模,生出cal物件。
- 設定參數:
* 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:
(一)安裝校調說明:
- 將 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
- *query(命令,行數,起點) :sql命令查詢,如果是select用queryF()丟回去,如果是select以外的指令,用xoopsSecurity檢查
- connect :連結資料庫
- genId :丟回0,以產生新一套id
- 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 :字串加反斜,找到\\"換成",然後整個字串前後加'。
- *queryf(命令,行數,起點) :補上limit段,將執行寫入logger物件
- queryfromfile :將sql檔讀取,用SqlUtility::splitMySqlFile拆成陣列,用SqlUtility::prefixQuery在表前加前置字串,用本物件query()方法執行
- getfieldname :取回欄名 mysql_field_name()
- getfieldtype :取回欄型 mysql_field_type()
- getfieldsnum :取回欄數 mysql_num_fields()
- xoopsdatabase :待定義
- setlogger :設日誌物件,預計導向 XoopsLogger 類別(在\class\logger.php中)
- *setprefix :設前置字
- *prefix :在表名前加前置字
- xoopsmysqldatabase :物件名
- xoopsmysqldatabaseproxy:物件名
(二)新增的屬性:
通道傳遞屬性
- $loop :sql來自於兩通道。值:1
- $action :目前的處理方式。
- $tables :諸資料表。
- $perpage0 :設定每頁顯示幾筆
- $perpage :目前每頁顯示幾筆
- $start :顯示起點
- $sql_query :現用查詢
- $rid :要找到某一筆資料
方法共用屬性
- $rownum :查詢指令諸筆數
- $fields :查詢指令諸選用欄名
- $tbl :查詢指令結果多維陣列,$tbl[0]是值二維陣列,$tbl[1]是諸選用欄,每欄一元素,欄名索引。$tbl[1]['欄名']['colname'或'collen'或'coltype'或'colflag'或'colalias'或''或''],$tbl[2]是某筆編輯選單
- $allfields :諸資料表全部欄位資料
(三)新增的方法:
- list1(sql命令,編輯狀態,每頁幾筆,欄名代稱):接受命令秀表。「編輯狀態」專供disp_table用。
- etable():實體化。設日誌、前置字並連結。
- decode(字串):用urldecode解碼後,再將+換回空白。
- uppage():向前翻頁,調start及perpage屬性。
- allpage():全部顯示,調perpage屬性。
- downpage():向後翻頁,調start及perpage屬性。
- erase(表格名,$rid):刪一筆。
- edited(表格名,$rid):用$_POST['f']的資料,更新$rid所指的那一筆。
- ins_ed(表格名):用$_POST['f']的資料,新增一筆。
- ins(表格名):叫addElements()。
- queryET(sql命令,每頁幾筆,開始筆數):拆出sql諸段,諸表放進tables屬性(陣列),用queryF出去。
- mk_tbl(結果id,欄名代稱,欲編的rid,是否編):
- 設rownum屬性(筆數)。
- 取諸欄屬性(含欄名代稱),並設為tbl[1]。
- 造每一筆的欄值元素及rid),如果rid恰為欲編筆之rid:addElements('edited',$row,trim($rid))得出表單,並放tbl[2]
- tbl[0]為欄值二維陣列。
- addElements(插或編,某筆之諸欄值,欲編筆之rid):產生表單。
- disp_table(編輯狀態):以表格方式秀。翻頁0,1,插筆0,2,編刪0,4。
- cuts(開始字串,結束字串,欲擷取字串):從欲擷取字串中,開始字串到結束字串所包夾的段落做成陣列。
(四)問題與限制:
- 尚未解決一php多物件時,不同物件如何共用POST通道及REQUEST通道。所以最多加一個編輯狀態,每頁幾筆均為0的物件,使其不使用通道。
- 尚未解決多表問題。
- 表單加入選項未完全處理。
拾、smarty 介紹
一、原理:
- Smarty 在解析程式檔與樣版檔後,會將這兩個檔案再編譯為一個php 檔案。
- 當使用者瀏覽網頁時,PHP直接解譯編譯過的PHP檔案,以加快速度。
- 當程式碼或樣版檔有改變時,Smarty 會自動再編譯一次,不須手動重新編譯。
- smarty 提供兩種讀取樣版檔的方法,一為直接從檔案讀取,另外一種則將樣板檔存入資料庫中,再由資料庫讀取。
- xoops 採用後者,因此每當樣版有改變時,必須由管理員選單/模組安裝處重新載入樣板,才會更新資料庫,取得新的樣版。
二、變數、函式、算符:
- xoops中前後加角括號。
- {$smarty.陣列.字串索引}:叫陣列中的元素值
- {$smarty.const.XOOPS_URL}:叫XOOPS_URL的常數
- {$smarty.server.PHP_SELF}:來自server變數,變數名叫PHP_SELF的變數值,即載入樣版之php。
- {$smarty.get.page}:來自get通道,變數名叫page的變數值
- {$smarty.post.page}:來自post通道,變數名叫page的變數值
- {$smarty.cookies.username}:來自cookies通道,變數名叫username的變數值
- {$smarty.env.PATH}:來自環境變數,變數名叫PATH的變數值。
- {$smarty.request.username}:來自混合自get/post/cookies/server/env,變數名叫username的變數值。
- {$smarty.session.id}:來自session變數,變數名叫id的變數值。
- {$commentsnav}
- {$lang_notice}
- {html_options output=一維陣列 values=一維陣列 options=一維陣列 selected=值}:產生select中的諸option
- output,values成對,元素數相同,前者管顯示,後者管值。
- options代替output,values,元素的key管選項值,元素值管選項顯示。
- selected管預選值,其值若在諸選項值中則預選。
- {html_radios name=元件名 options=一維陣列 selected=值 separator=字串}:產生input的諸radio
- options,元素的key管選項值,元素值管選項顯示。
- selected管預選值,其值若在諸選項值中則預選。
- 諸選項間用separator隔開
- {html_checkboxes name=元件名 options=一維陣列 selected=值 separator=字串}:產生input的諸checkbox,參數值同上
- {html_select_date prefix=元件名前置字 field_array=元件名陣列 time=選單預設日期 start_year="-往前幾年" end_year="+往後幾年" display_days=true或false field_order="YMD" field_separator="選單間隔字串" month_format="%m月"}
- 預設三組select元件名為Year、Month、Day,預設元件名前置字為Date_,所以如省略prefix,三元件名為Date_Year、Date_Month、Date_Day。
- 可將元件名變成一陣列之元素,陣列名由field_array指定,例如field_array=bir,三元件名變為bir[Year]、bir[Month]、bir[Day]。
- time為選單預設日期,使用YYYY-MM-DD格式,預設為今天。
- start_year、end_year,決定年度選項範圍。
- display_days決定要不要顯示日期。
- field_order決定三個select選單的順序,預設為MDY。
- field_separator為選單間隔字串。
- month_format為月份格式,%m(01-12)為十進位數字,%B為英文全稱,%b為英文縮寫。預設為%B。
- month_value_format為月份值格式,%m為十進位數字,%B為英文全稱,%b為英文縮寫。預設為%m。
- day_format為日期格式,%d(01-31),%e(1-31)。預設為%02d。
- day_value_format為日期值格式,%d(01-31),%e(1-31)。預設為%e。
- {html_table loop=一維陣列 cols=欄數 table_attr=表格屬性 tr_attr=列屬性}:產生簡易表格
- loop,放各td中要擺的值。
- 在省略欄數時,自動取總格數的平方根以決定欄數。
- {if 條件}…{elseif 條件}…{/if}:合條件才秀…。
- {foreach from=n維陣列 item=data}…{/foreach}:…中的$data為n維陣列的元素,為n-1維陣列,且每一個元素執行一迴圈。
- {foreach from=一維陣列 item=data}…{/foreach}:…中的$data為一維陣列中每一個元素。
- {foreach from=首維為註標索引次維為字串索引的二維陣列 item=data}…{/foreach}:…中的$data為一維陣列;「$data.字串索引」為一維陣列中的每一個元素。
- {include file="db:檔名"}
- {cycle values="值一,值二"}:諸值交替
三、使用方法:
必有兩個程式,其中之一為php:
- php檔
require('Smarty.class.php');
$物件 = new Smarty;
$物件->assign('樣版變數名', 值 );
$物件->display('樣版檔名');
- 樣版檔
{$樣版變數}
{算符 $樣版變數們}
{函式 $樣版變數們}
- xoops
- smarty物件固定叫 $xoopsTpl
- 樣版用<{}>代替{}
- 可以用$xoopsTpl->display('樣版檔名') 也可以用 $xoopsOption['template_main'] = '樣版檔名'。
四、修改函式:
(一)讓option可以用disabled屬性:
- 改class/smarty/plugins/function.html_options.php
- 參數型別轉換加
case 'disabled':
$$_key = array_map('strval', array_values((array)$_val));
break;
- 三處呼叫smarty_function_html_options_optoutput參數加 $disabled
- function smarty_function_html_options_optoutput定義加參數 $disabled,其內加
if (in_array((string)$key, $disabled))
$_html_result .= ' disabled';
拾壹、工具
一、轉碼:12-34頁
拾貳、改xoops
一、以戰國策edu-2為例
- 建資料庫及帳號,用戰國策資料庫管理介面。
- 用phpMyAdmin將資料庫校對方式設為utf8_general_ci,MySQL校對方式設為utf8_general_ci。
- 將\class\database\mysqldatabase.php 中 queryF 方法內「$result = mysql_query($sql, $this->conn);」或 connect 方法內「return true;」前加「@mysql_query("set names utf8");」。後者為快,前者保險。
- 用install或載入sql(無指定校對方式)建立36張基本table。
- 刪除tplfile中第33號樣板。並檢查所有資料表否密實。
- 建「保固說帖」自訂區塊。
- 改theme,將66行./themes/imago08/images/module.jpg註解掉。
- 改theme,頁尾註腳,計數器。
- 改/modules/system/templates/system_redirect.html及tplsource表中6號樣版:<h4>改為<h5>。
改/themes/imago08/style.css(IE用)及/themes/imago08/styleNN.css(Firefox用) 加「h5 {font-size:18px;}」。
- 改/themes/imago08/style.css及/themes/imago08/styleNN.css 註解掉li的list-type。
- 在/xoops.css中加丁丁自訂的段落。
- 「偏好設定/使用者管理/一般設定」暫設不可註冊。取消顯示「登入區塊」、主選單區塊。
- 戰國策沒有裝mb_subcut
- 裝commbook,換knsh八表。
- 裝檔案上傳,改uploader/include/conf.php:
- $homeurl
- $installurl
- $uploads_path 上傳路徑
- $url_path
- $maxalowedfilesize=10240;最大10M
- $datetimeformat="Y-m-d H:i";
- 改上傳資料夾屬性為 777
- 裝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
- 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}>」。
- 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論壇/區塊設定」均不能用。
- eguide/header.php的第39行多餘,應註解掉
- istats:cache設可寫入,footer.php加統計動作script。
- 加xcgal:2.03版
- 將etable.php放入/class/database中;將sql.php放入xoops中。
-
-
-
- 加xoops_pical_todo資料表。
-
諸模組
piCal行事曆模組:
(一)資料表欄位說明:結構從0.8-0.87皆同
- 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 :
- 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 :
- xoops_tplsource:筆數和xoops_tplfilexoops_tplfile相同
- tpl_id :代碼
- tpl_source:帶smarty的html碼。抄自樣版檔。
- xoops_group_permission:群組權限。見基本資料表。
- xoops_pical_plugins:插件
- pi_id :
- pi_title :
- pi_type :
- pi_dirname :
- pi_file :
- pi_dotgif :
- pi_options :
- pi_enabled :
- pi_weight :
- last_modified:
(二)管理介面:
- 群組區塊管理:網站管理者才能設,模組管理員不能設。
- 各群組對「使用」與「管理」權限的指定。
- 各群組對八區塊使用權。以及區塊位置。
- 偏好設定:網站管理者才能設,模組管理員不能設。
- 用戶(會員)權限:
- 全部不能新增事件。
- 全部可以新增事件要審核
- 全部可以新增事件免審核。
- 依群組權限設定,選此項後才能使「群組權限管理」生效。
- 訪客權限:
- 全部不能新增事件。
- 全部可以新增事件要審核
- 全部可以新增事件免審核。
- 可否匯出 ics 檔案的權限。
- 群組權限管理:管理各群組5個「使用權限」,新增事件(免審、要審)、編輯事件(免免審、要審)、刪除事件。
- 類別瀏覽管理:管理各群組對各類別(專案),有無瀏覽權限。
- 類別管理:建立各種事件類別,專案有多層結構。
- 新增類別。
- 刪除類別。
- 插入事件。
- 決定排序。
- 決定是否有效。
- 事件管理:
- 選出事件。
- 以未來、過去、所有選出事件。
- 以專案(類別)選出事件。
- 蒐尋事件主題及說明的字串。
- 新增事件(鉛筆)、觀看及編輯事件(點主題)、刪除事件。
- 匯出事件。
- 移動或複製事件到另一個類別(專案)。
(三)使用介面:
- 年曆:
- 顯示全年各月、各日。
- 選類別(專案),在相關的日子畫底線。
- 點日子,出月曆。
- 月曆(預設):
- 顯示一個月、各日。
- 選類別(專案),在相關的日子出事件主題。
- 點鉛筆新增事件。
- 點事件主題,看、編、刪該事件。
- 日曆:
- 顯示一天諸事件。
- 選類別(專案),在印事件主題、說明。
- 點鉛筆新增事件。
- 點事件主題,看、編、刪該事件。
- 事件瀏覽、編、刪:
- 選類別(專案),及「某日」之前、之主題。
- 新增類別。
- 刪除類別。
- 插入事件。
- 決定排序。
- 決定是否有效。
(四)程式說明:(0.88a)
- 註解編碼是EUC-JP,先翻成utf-8,再翻成繁中。
- 新增事件進入點在index.php?cid=類碼&smode=Monthy&action=Edit&caldate=2005-8-10
- 類別定義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 )
類別定義結束
- 時區相依問題
- 「管理員選單/偏好設定/系統/一般設定/伺服器主機時區」設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' )。
- function get_schedule_edit_html
預設模式為Monthly
「如為舊事件
登入者非本人或管理者,設為不可編輯、不可刪除
依各欄值設定表單元件
詳細內容用文字區塊過濾函式,事件名、地點、相關人員用文字過濾函式,
專案類別、公開於何群組、重覆規則、poster_tz照抄,
公開與否跑判別式定三變數
已審或待審判別後,選定字串
依可編狀態生「變更」按鈕($update_button),生「儲存為」按鈕($insert_button),依可刪狀態生「刪除」按鈕($delete_button)
時區選單用時區選單函式產生
依全天選項之值定三個checkbox之值並計算開始、結束日時的表示值
如為新事件
檢查可插狀態
設各表單元件初值」
造開始日時表單,結束日時表單
造專案類別選擇複選框
造「詳細內容」的textarea。如在xoops中,加xoops編輯介面,如不是則使用單純的textarea。
丁丁私製:製造和登入者同群組者選單,製造完成日期選單(仿開始日),製造計工單產編選單
返回字串初設(加丁丁私製部分),返回字串加按扭,
送回返回字串
- 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 工作追蹤:
- 修改資料表:
- 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 '*',
- 觀看事件在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行] }
- 編輯事件在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 !='' ):事件完成日期不為空白,則用用文字過濾函式秀出完成日期;
- 資料表更新在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(時區)。
- 製造時區選項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行] }
- 改模組language中pical_constants.php,_PICAL_TH_CATEGORIES(專案類別)、_PICAL_TH_CLASS(是否公開);加_PICAL_TH_FINISH_MAN(負責人)、_PICAL_TH_FINISH_DATE(完成日期)、_PICAL_TH_FINISH_NOTE(*代表不列管,-代表列管中尚未完成,日期代表已完成。)。
- 註解編碼是EUC-JP,先翻成utf-8,再翻成繁中。
(六)修改模組 for 記工單:
- 修改資料表:
- 以站長的身份,用使用者管理在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(加班結束)三欄。
- 觀看事件在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行] }
- 編輯事件在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 「類別的瀏覽權限」:
- 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()方法會傳回群組類別的配對表。
- mygroupperm.php為群組前置處理為「類別的瀏覽權限」(cat2groupperm.php)「群組權限管理」(groupperm.php)「區塊與群組管理」(myblocksadmin.php)所共用。
- 先改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']) ;」
- 再改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。
- 修改後,只要執行cat2groupperm.php?gid=群組代碼,就可以設定該群組的「類別的瀏覽權限」。
檔案上傳:
(一)傳檔系統(taduploader)tad:
- 150k,big5。用上傳梯次管理上傳期間、檔案類型。
- 上傳目錄在xoops的uploads/tadup,一梯次一資料夾。反安裝時,不刪除各上傳資料夾。
- 下載使用:去uploads/tadup。
(二)網路文件櫃(fileup)tad:
- 22.9k,big5。
- 上傳目錄在xoops的uploads/upfile。反安裝時,不刪除各上傳資料夾。
- 下載使用:在檔案列表中直接點閱。
(三)網路文件櫃(uploader):
- 116k,big5。不使用table管理,檔案直接上傳。
- 上傳目錄在xoops的模組目錄的本模組下的/files。要調權限,上傳才會成功。反安裝時,不刪除各上傳資料夾。
- 下載使用:在檔案列表中直接點閱。
線上表單:
(一)(formulaire)V324:
- 歐展嘉實驗站 http://163.20.160.28/xoops2013u/ 帳號:eric 密碼:123456
- 表格可以隨意設計,填寫次數也不限,且可以設定不要發信(不然填一次就收一次,也是很煩吧)
- 但無法設定當天幾點後關閉表格(這樣就會有爭議產生了..填了不調是怎樣..但明明是下班後才填的)
- 且沒有檢視填寫人數的功能
- 產生的CSV也是亂碼...