菜鳥初學設計,希望大家多多指點,並協助實現。謝謝_PHP
最後更新:2016-06-01
來源:互聯網
上載者:User
關鍵字
指點
協助
實現
謝謝
多多
大家
書寫的比較規範,思路清晰。希望大家各述己見 --- 嘮叨
================================================
分類管理(不完整設計-概述)(1)
qzhl 發表於 2002-3-13 17:57 PHP編程 ←返回版面
class.id //分類號 唯一
class.classStr //分類字串 = 父分類字串+","+父id 用於 選出所有子分類
class.parentId //父Id 可以用上面的欄位得到 不一定能實現
功能模組說明:
addClass //添加分類
入口:
[parentId] //父分類號
//類名
[其他欄位] //非必須欄位
出口:
listClass //根據模版樣式輸出分類
入口:
<$rootId> //要顯示分類的根節點的 id 即顯示所有 rootId 的子節點
[$tree] //是否全部展開
//預設的模版變數用來確定模版
modiClass //修改單獨分類的資訊
入口:
<必要的欄位>
[可選的欄位]
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] //父分類號
//類名
[其他欄位] //非必須欄位
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 $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 //建立當前節點
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);
}
//塊結構
{black縮排空格}{name}[其他需要輸出的內容]
/*******************************************************************/
分類管理(不完整設計-修改分類)(6)
修改分類資訊(modiClass)
0.實現簡述:
1 介面參數
1.1 入口
<必要的欄位>
[可選的欄位]
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]."
");
//此時數組 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,管理員判斷管理
?>