書寫的比較規范,思路清晰。希望大家各述己見 --- 嘮叨 ================================================
分類管理(不完整設計-概述)(1) qzhl 發表于 2002-3-13 17:57 PHP編程 ←返回版面
class.id //分類號 唯一 class.classStr //分類字符串 = 父分類字符串+","+父id 用于 選出所有子分類 class.parentId//父Id 可以用上面的字段得到 不一定能實現
功能模塊說明:
addClass//添加分類 入口: [parentId]//父分類號 <name>//類名 [其他字段]//非必須字段 出口:<errNo> listClass//根據模版樣式輸出分類 入口: <$rootId>//要顯示分類的根節點的 id即顯示所有 rootId 的子節點 [$tree]//是否全部展開 //默認的模版變量用來確定模版 modiClass//修改單獨分類的信息 入口: <id> <必要的字段> [可選的字段] modiClassForm 入口 [$id]//分類號 出口 各字段值發送給 modiClass delClass//刪除分類 如果包含子分類 則不允許刪除 入口: <$id>
分類管理(不完整設計-數據結構)(2)
分類表
CREATE TABLE class ( classStr varchar(10) NOT NULL default '0',分類字符串* parentId int(11) default '0',父分類號 id int(11) NOT NULL default '0',分類號*//自動增長 logo varchar(50) default NULL,圖標 name varchar(20) NOT NULL default '',類名* description varchar(50) default 'Welcome',描述 dispOrder int(11) default NULL,顯示順序 masterId int(11) default NULL,管理員號 masterName varchar(20) default NULL,管理員名 [此處可再擴充發言表管理員的名字 用于在發言管理中] childNum int(11) default NULL,子節點數量 modiTime datetime default NULL,最后修改時間 UNIQUE KEY id (id)分類號 唯一 ) TYPE=MyISAM;
發言表
CREATE TABLE msg ( bid int(11) NOT NULL default '0',分類號 id int(11) NOT NULL default '0',分類內序號 topic varchar(100) NOT NULL default '',主題 context text,內容 author varchar(20) NOT NULL default '',作者 email varchar(40) default '',郵箱 wdate datetime NOT NULL default '0000-00-00 00:00:00', 發言時間 levelnum tinyint(3) unsigned NOT NULL default '0', 回復層次 orderid float NOT NULL default '0'排序號 ) TYPE=MyISAM;
分類管理(不完整設計-添加分類)(3)
功能:
添加分類(addClass) 0.功能簡述:
1 接口參數
1.1 入口
[parentId]//父分類號
<name>//類名 [其他字段]//非必須字段
1.2 出口
[errNo]//錯誤碼用 include 發送給 錯誤 顯示功能(區分語言)
2 變量聲明
var parentId; var classStr;
3 功能實現
if(empty($name)){ errNo = N; include_once(錯誤功能頁面);//錯誤頁面根據語言輸出錯誤并返回(見 func.txt) } //if(empty($parentId)):
$parentId = 0;//默認就是 0 此句不用寫 // id 設置為自動增長 INSERT INTO class(classStr,parentId,name,[其他字段]) VALUES(0,0,$name,[其他字段]);
//if(!empty($parentId)): SELECT @classStr:=CONCAT(classStr,',',id) FROM class WHERE id=$parentId; //CONCAT 連接字符串 INSERT INTO class(classStr,parentId,name,[其他字段]) VALUES(@classStr, $parentId, $name, [其他字段]);
分類管理(不完整設計-權限管理)(4)
權限管理 chkPower 功能 0 功能簡述 根據 管理模式 判斷當前用戶 是否可以通過本模塊。 1 接口參數 1.1 入口 session(user['id']) <$id>//需要判斷權限的分類的 id session(user['power'])//user['power'] = 'id,id,id' 1.2 出口 errNo//沒有權限 user['power'] .= ',id'//認證通過 2 實現
判斷 id 是否在 session(user['power']) 中 是:通過 否:管理模式 0: SELECT @classStr:=classStr FROM class WHERE id = $id //判斷當前類的 分類字符串 是否包含 user[id] 所管理的任何一個分類 是 則通過 說明當前分類是子分類 SELECT <任何字段> FROM class WHERE @classStr LIKE CONCAT('%',id,'%') AND masterId = session(user[id]) 如果返回的記錄集不為空 則通過。 并 user['power'] .= $id; 管理模式 1: //判斷 當前用戶是否在 當前類管理員列表中 是 則通過。 SELECT <任何字段> FROM class WHERE masterId LIKE CONCAT('%',user['id'],'%') AND id = $id 如果沒有通過: errNo = n; include(error.php)
分類管理(不完整設計-顯示分類)(5)
顯示分類(listClass)
0 功能描述
1 接口參數
1.1 入口
$rootId要顯示分類的根節點的 id即顯示所有 rootId 的子節點 $tree是否全部展開 //默認的模版變量 1.2 出口 errNo
2 變量聲明
var $result;//記錄集 var $nodeNum;//節點數量 var $allNodeArray;//所有節點數組 var $html;//模板變量
3 函數聲明
function getResult(rootId,tree) //得到一個需要的記錄集 function pAllNode1(level,rootNodeId,nodeArray[][]) //遍歷函數 level 表示輸出層次 nodeArray 記錄集數組 function buildTree(black,currentNode) //輸出函數 調用 模板類 調用模板 賦值模板變量 追加塊 得到樹形結構
4 功能實現 //連接數據庫 $result = getResult($rootId,$tree); $nodeNum = mysql_num_rows($result); $allNodeArray = array(nodeNum); $html = new Template(); //將記錄集放入二維數組。將父id放入數組第一個元素 for(i=0;i<nodeNum;i++){ $allNodeArray[i] = mysql_fetch_array($result); } //關閉數據庫 $html->set_file('listClass','listClass.tpl'); $html->set_block('listClass','node','nodes');
pAllNode1(0,n,$allNodeArray);
$html->pparse('out','listClass');
/*********** function **********************************************/
//得到一個需要的記錄集 function getResult(rootId,tree){ //參數說明: //rootId 要顯示分類的根節點的 id即顯示所有 rootId 的子節點 //tree 是否全部展開
if(empty($rootId)) $rootId = 0;
if(tree=false){ // 只列出一層 strSQL = SELECT @classStr:=classStr FROM class WHERE id=$rootId; SELECT name,classStr,[其他字段] FROM class WHERE classStr LIKE CONCAT(@classStr, ',', '%') AND classStr NOT LIKE CONCAT(@classStr, ',', '%,%'); } if(tree=true){//列出整棵樹 strSQL = SELECT @classStr:=classStr FROM class WHERE id=$rootId; SELECT name,classStr,[其他字段] FROM class WHERE classStr LIKE CONCAT(@classStr, ',', '%') } return mysql_quary(strSQL); }
//遍歷函數 level 表示輸出層次 nodeArray 記錄集數組
function pAllNode(level,rootNodeId,nodeArray){ //如果當前節點的父id等于跟節點id while(current(nodeArray)[0]==rootNodeId){ //輸出當前節點 //遞歸調用,current(nodeArray)[1] 表示: 當前節點id, 數組不變 pAllNode(level+1,current(nodeArray)[1],nodeArray); next(nodeArray); } }
//遍歷函數1 function pAllNode1(level,rootNodeId,nodeArray[][]){ i=0; //用于存放本層的元素 tmpArr = array(); //從數組中搜索所有元素 生成第一層元素 while(list($k,$v)=each(nodeArray)){ //如果元素的 父id 即nodeArray[][0] 或者 $v[0]==rootNodeId if($v[0]==rootNodeId){ //生成新的數組只包含第一層的元素 即 父節點為 rootNodeId tmpArr[i]=$v[0]; //刪除原數組中已選出的元素 unset(nodeArray[$k]); //新數組的下標加一 i++; } } while(list($k,$v)=each(tmpArr)){ //生成縮進 for(i=0;i<level;i++) $str .= " "; //建立當前節點 buildTree($str,$v[2]); //此時數組 nodeArray 已經去除了第一層的元素 pAllNode1(level+1,$v[1],nodeArray); } }
//輸出函數 調用 模板類 調用模板 賦值模板變量 追加塊 得到樹形結構 //對所有需要的變量進行替換 模板不同 則生成兩種類型的頁面(只有類名的樹形結構,有詳細信息的列表) //black 生成的縮進空格 function buildTree(black,currentNode){ set_var('鏈接',currentNode[1]); set_var('name',currentNode[2]); set_var('black',black): parse('nodes','row',ture); } //塊結構 <!-- node BEGIN --> {black縮進空格}<a href={鏈接?classid=n}>{name}</a>[其他需要輸出的內容] <!-- node END -->
/*******************************************************************/
分類管理(不完整設計-修改分類)(6)
修改分類信息(modiClass) 0.實現簡述:
1 接口參數
1.1 入口 <id> <必要的字段> [可選的字段]
1.2 出口
[errNo]
2 變量聲明
3 功能實現 if (<必要字段> 不存在) errNo = n include(錯誤處理功能)
update 數據 where id = $id;
分類管理(不完整設計-修改表單)(7)
修改表單(modiClassForm) 0.實現簡述:
1 接口參數
1.1 入口
[$id]//分類號
1.2 出口 各字段值發送給 modiClass
2 變量聲明
3 功能實現
//根據 $id 查詢數據庫得到相應的信息 //調用 修改類表單模板用查到的數據替換相應的表單元素值。 //輸出給用戶。 //用戶修改后提交給 modiClass 功能。
分類管理(不完整設計-遍歷函數)(8)
<? function pAllNode($level,$rootNodeId,$nodeArray){ reset($nodeArray); $i=0; //用于存放本層的元素 $tmpArr = array(); //從數組中搜索所有元素 生成第一層元素 while(list($k,$v)=each($nodeArray)){ //如果元素的 父id 即nodeArray[][0] 或者 $v[0]==rootNodeId if($v[0]==$rootNodeId){ //生成新的數組只包含第一層的元素 即 父節點為 rootNodeId $tmpArr[$i]=$v; //刪除原數組中已選出的元素 //unset($nodeArray[$k]); //新數組的下標加一 $i++; } } reset($tmpArr); //生成縮進 for($j=0;$j<$level;$j++) $str .= " "; while(list($k,$v)=each($tmpArr)){ //輸出當前節點 print($str.$v[1].$v[2]."<br>"); //此時數組 nodeArray 已經去除了第一層的元素 pAllNode($level+1,$v[1],$nodeArray); } }
$tt = array( array(0,1,"b"), array(0,2,"b"), array(1,3,"b"), array(1,4,"b"), array(0,5,"b"), array(2,6,"b"), array(6,7,"b") ); pAllNode(0,0,$tt);
?>
分類管理(不完整設計-配置文件)(9)
配置文件說明: <? /*安裝時需要初始化的本地信息內容*************************************/ //分類管理的目錄信息 global $PATH_INFO; $PATH_INFO = array (); //數據庫配置信息 global $DB_INFO; $DB_INFO = array (); /********************************************************************/ /*可用的模板設置添加*************************************************/ //模板樣式添加 global $TPL_TYPE; $TPL_TYPE = array ( '管理'=> '', '用戶'=> '' ); //語言添加 global $LANGUAGE; $LANGUAGE = array (); /********************************************************************/ //定義程序運行時消息包括兩種語言 global $RUNTIME_MSG; $RUNTIME_MSG = array( 'cannot_is_null'=> array('不能為空','e不能為空'), 'submit_success'=> array('提交成功','e提交成功') ); //界面默認配置 global $MSGBD_CONF; $MSGBD_CONF = array ( 'tpltype'=> $TPL_TYPE[0],//默認模板樣式設置 'language'=> $LANGUAGE[0] //默認語言設置 ); //默認管理模式 global $MANAGE_MODEL;// 0,繼承樹形管理,1,管理員判斷管理 ?>
|