欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

菜鸟初学设计,希望大家多多指点,并帮助实现。谢谢_PHP

程序员文章站 2022-06-16 17:11:14
...
书写的比较规范,思路清晰。希望大家各述己见 --- 唠叨
================================================


分类管理(不完整设计-概述)(1)
qzhl 发表于 2002-3-13 17:57 PHP编程 ←返回版面

class.id //分类号 唯一
class.classStr //分类字符串 = 父分类字符串+","+父id 用于 选出所有子分类
class.parentId //父Id 可以用上面的字段得到 不一定能实现


功能模块说明:

addClass //添加分类
入口:
[parentId] //父分类号
//类名
[其他字段] //非必须字段
出口:
listClass //根据模版样式输出分类
入口:
//要显示分类的根节点的 id 即显示所有 rootId 的子节点
[$tree] //是否全部展开
//默认的模版变量用来确定模版
modiClass //修改单独分类的信息
入口:


[可选的字段]
modiClassForm
入口
[$id] //分类号
出口
各字段值发送给 modiClass
delClass //删除分类 如果包含子分类 则不允许删除
入口:




分类管理(不完整设计-数据结构)(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
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 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,管理员判断管理
?>