|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
兴趣可能会慢慢消亡,所以适当培养兴趣会激发自己无线的乐趣,有了乐趣,编程有啥难的。初学|设计 书写的对照标准,思绪明晰。但愿人人各述己见 --- 絮聒
================================================
分类办理(不完全设计-概述)(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,办理员判别办理
?>
完成一个功能齐全的动态站点 |
|