明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

菜鳥初學設(shè)計,希望大家多多指點,并幫助完成。謝謝

[摘要]書寫的比較規(guī)范,思路清晰。希望大家各述己見 --- 嘮叨================================================分類管理(不完整設(shè)計-概述)(1) qzhl...
書寫的比較規(guī)范,思路清晰。希望大家各述己見 --- 嘮叨
================================================


分類管理(不完整設(shè)計-概述)(1)
qzhl 發(fā)表于 2002-3-13 17:57 PHP編程 ←返回版面 

class.id //分類號 唯一
class.classStr //分類字符串 = 父分類字符串+","+父id 用于 選出所有子分類
class.parentId//父Id 可以用上面的字段得到 不一定能實現(xiàn)


功能模塊說明:

addClass//添加分類
入口:
[parentId]//父分類號
<name>//類名
[其他字段]//非必須字段
出口:<errNo>
listClass//根據(jù)模版樣式輸出分類
入口:
<$rootId>//要顯示分類的根節(jié)點的 id即顯示所有 rootId 的子節(jié)點
[$tree]//是否全部展開
//默認的模版變量用來確定模版
modiClass//修改單獨分類的信息
入口:
<id>
<必要的字段>
[可選的字段]
modiClassForm
 入口
[$id]//分類號
出口
各字段值發(fā)送給 modiClass
delClass//刪除分類 如果包含子分類 則不允許刪除
入口:
<$id>



分類管理(不完整設(shè)計-數(shù)據(jù)結(jié)構(gòu))(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,管理員名
[此處可再擴充發(fā)言表管理員的名字 用于在發(fā)言管理中]
childNum int(11) default NULL,子節(jié)點數(shù)量
modiTime datetime default NULL,最后修改時間
UNIQUE KEY id (id)分類號 唯一
) TYPE=MyISAM;

發(fā)言表

CREATE TABLE msg (
bid int(11) NOT NULL default '0',分類號
id int(11) NOT NULL default '0',分類內(nèi)序號
topic varchar(100) NOT NULL default '',主題
context text,內(nèi)容
author varchar(20) NOT NULL default '',作者
email varchar(40) default '',郵箱
wdate datetime NOT NULL default '0000-00-00 00:00:00',
發(fā)言時間
levelnum tinyint(3) unsigned NOT NULL default '0',
回復(fù)層次
orderid float NOT NULL default '0'排序號
) TYPE=MyISAM;


分類管理(不完整設(shè)計-添加分類)(3)

功能:

添加分類(addClass)
0.功能簡述:


1 接口參數(shù)

1.1 入口

[parentId]//父分類號

<name>//類名
[其他字段]//非必須字段

1.2 出口

[errNo]//錯誤碼用 include 發(fā)送給 錯誤 顯示功能(區(qū)分語言)

2 變量聲明

var parentId;
var classStr;

3 功能實現(xiàn)

if(empty($name)){
errNo = N;
include_once(錯誤功能頁面);//錯誤頁面根據(jù)語言輸出錯誤并返回(見 func.txt)
}
//if(empty($parentId)):

$parentId = 0;//默認就是 0 此句不用寫
// id 設(shè)置為自動增長
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, [其他字段]);


分類管理(不完整設(shè)計-權(quán)限管理)(4)

權(quán)限管理
chkPower 功能
0 功能簡述
根據(jù) 管理模式 判斷當前用戶 是否可以通過本模塊。
1 接口參數(shù)
1.1 入口
session(user['id'])
<$id>//需要判斷權(quán)限的分類的 id
session(user['power'])//user['power'] = 'id,id,id'
1.2 出口
errNo//沒有權(quán)限
user['power'] .= ',id'//認證通過
2 實現(xiàn)

判斷 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)


分類管理(不完整設(shè)計-顯示分類)(5)

顯示分類(listClass)

0 功能描述

1 接口參數(shù)

1.1 入口

$rootId要顯示分類的根節(jié)點的 id即顯示所有 rootId 的子節(jié)點
$tree是否全部展開
//默認的模版變量
1.2 出口
errNo

2 變量聲明

var $result;//記錄集
var $nodeNum;//節(jié)點數(shù)量
var $allNodeArray;//所有節(jié)點數(shù)組
var $html;//模板變量

3 函數(shù)聲明

function getResult(rootId,tree)
//得到一個需要的記錄集
function pAllNode1(level,rootNodeId,nodeArray[][])
//遍歷函數(shù) level 表示輸出層次 nodeArray 記錄集數(shù)組
function buildTree(black,currentNode)
//輸出函數(shù) 調(diào)用 模板類 調(diào)用模板 賦值模板變量 追加塊 得到樹形結(jié)構(gòu)

4 功能實現(xiàn)
//連接數(shù)據(jù)庫
$result = getResult($rootId,$tree);
$nodeNum = mysql_num_rows($result);
$allNodeArray = array(nodeNum);
$html = new Template();
//將記錄集放入二維數(shù)組。將父id放入數(shù)組第一個元素
for(i=0;i<nodeNum;i++){
$allNodeArray[i] = mysql_fetch_array($result);
}
//關(guān)閉數(shù)據(jù)庫
$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){
//參數(shù)說明:
//rootId 要顯示分類的根節(jié)點的 id即顯示所有 rootId 的子節(jié)點
//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);
}

//遍歷函數(shù) level 表示輸出層次 nodeArray 記錄集數(shù)組

function pAllNode(level,rootNodeId,nodeArray){
//如果當前節(jié)點的父id等于跟節(jié)點id
while(current(nodeArray)[0]==rootNodeId){
//輸出當前節(jié)點
//遞歸調(diào)用,current(nodeArray)[1] 表示: 當前節(jié)點id, 數(shù)組不變
pAllNode(level+1,current(nodeArray)[1],nodeArray);
next(nodeArray);
}
}

//遍歷函數(shù)1
function pAllNode1(level,rootNodeId,nodeArray[][]){
i=0;
//用于存放本層的元素
tmpArr = array();
//從數(shù)組中搜索所有元素 生成第一層元素
while(list($k,$v)=each(nodeArray)){
//如果元素的 父id 即nodeArray[][0] 或者 $v[0]==rootNodeId
if($v[0]==rootNodeId){
//生成新的數(shù)組只包含第一層的元素 即 父節(jié)點為 rootNodeId
tmpArr[i]=$v[0];
//刪除原數(shù)組中已選出的元素
unset(nodeArray[$k]);
//新數(shù)組的下標加一
i++;
}
}
while(list($k,$v)=each(tmpArr)){
//生成縮進
for(i=0;i<level;i++) $str .= " ";
//建立當前節(jié)點
buildTree($str,$v[2]);
//此時數(shù)組 nodeArray 已經(jīng)去除了第一層的元素
pAllNode1(level+1,$v[1],nodeArray);
}
}

//輸出函數(shù) 調(diào)用 模板類 調(diào)用模板 賦值模板變量 追加塊 得到樹形結(jié)構(gòu)
//對所有需要的變量進行替換 模板不同 則生成兩種類型的頁面(只有類名的樹形結(jié)構(gòu),有詳細信息的列表)
//black 生成的縮進空格
function buildTree(black,currentNode){
set_var('鏈接',currentNode[1]);
set_var('name',currentNode[2]);
set_var('black',black):
parse('nodes','row',ture);
}
//塊結(jié)構(gòu)
<!-- node BEGIN -->
{black縮進空格}<a href={鏈接?classid=n}>{name}</a>[其他需要輸出的內(nèi)容]
<!-- node END -->

/*******************************************************************/



分類管理(不完整設(shè)計-修改分類)(6)

修改分類信息(modiClass)
0.實現(xiàn)簡述:


1 接口參數(shù)

1.1 入口
<id>
<必要的字段>
[可選的字段]

1.2 出口

[errNo]

2 變量聲明


3 功能實現(xiàn)
if (<必要字段> 不存在) errNo = n include(錯誤處理功能)

update 數(shù)據(jù) where id = $id;



分類管理(不完整設(shè)計-修改表單)(7)

修改表單(modiClassForm)
0.實現(xiàn)簡述:


1 接口參數(shù)

1.1 入口

[$id]//分類號

1.2 出口
各字段值發(fā)送給 modiClass

2 變量聲明


3 功能實現(xiàn)

//根據(jù) $id 查詢數(shù)據(jù)庫得到相應(yīng)的信息
//調(diào)用 修改類表單模板用查到的數(shù)據(jù)替換相應(yīng)的表單元素值。
//輸出給用戶。
//用戶修改后提交給 modiClass 功能。


分類管理(不完整設(shè)計-遍歷函數(shù))(8)

<?
function pAllNode($level,$rootNodeId,$nodeArray){
reset($nodeArray);
$i=0;
//用于存放本層的元素
$tmpArr = array();
//從數(shù)組中搜索所有元素 生成第一層元素
while(list($k,$v)=each($nodeArray)){
//如果元素的 父id 即nodeArray[][0] 或者 $v[0]==rootNodeId
if($v[0]==$rootNodeId){
//生成新的數(shù)組只包含第一層的元素 即 父節(jié)點為 rootNodeId
$tmpArr[$i]=$v;
//刪除原數(shù)組中已選出的元素
//unset($nodeArray[$k]);
//新數(shù)組的下標加一
$i++;
}
}
reset($tmpArr);
//生成縮進
for($j=0;$j<$level;$j++) $str .= " ";
while(list($k,$v)=each($tmpArr)){
//輸出當前節(jié)點
print($str.$v[1].$v[2]."<br>");
//此時數(shù)組 nodeArray 已經(jīng)去除了第一層的元素
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);

?>


分類管理(不完整設(shè)計-配置文件)(9)

配置文件說明:
<?
/*安裝時需要初始化的本地信息內(nèi)容*************************************/
//分類管理的目錄信息
global $PATH_INFO;
$PATH_INFO = array ();
//數(shù)據(jù)庫配置信息
global $DB_INFO;
$DB_INFO = array ();
/********************************************************************/
/*可用的模板設(shè)置添加*************************************************/
//模板樣式添加
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],//默認模板樣式設(shè)置
'language'=> $LANGUAGE[0] //默認語言設(shè)置
);
//默認管理模式
global $MANAGE_MODEL;// 0,繼承樹形管理,1,管理員判斷管理
?>