书写的比较规范,思路清晰。希望大家各述己见 — 唠叨
================================================
分类管理(不完整设计-概述)(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,管理员判断管理
?>
