0

0

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

php中文网

php中文网

发布时间:2016-06-21 09:12:09

|

1292人浏览过

|

来源于php中文网

原创

初学|设计

书写的比较规范,思路清晰。希望大家各述己见 --- 唠叨
================================================
    

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



本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python 序列化
Python 序列化

本专题整合了python序列化、反序列化相关内容,阅读专题下面的文章了解更多详细内容。

0

2026.02.02

AO3官网入口与中文阅读设置 AO3网页版使用与访问
AO3官网入口与中文阅读设置 AO3网页版使用与访问

本专题围绕 Archive of Our Own(AO3)官网入口展开,系统整理 AO3 最新可用官网地址、网页版访问方式、正确打开链接的方法,并详细讲解 AO3 中文界面设置、阅读语言切换及基础使用流程,帮助用户稳定访问 AO3 官网,高效完成中文阅读与作品浏览。

91

2026.02.02

主流快递单号查询入口 实时物流进度一站式追踪专题
主流快递单号查询入口 实时物流进度一站式追踪专题

本专题聚合极兔快递、京东快递、中通快递、圆通快递、韵达快递等主流物流平台的单号查询与运单追踪内容,重点解决单号查询、手机号查物流、官网入口直达、包裹进度实时追踪等高频问题,帮助用户快速获取最新物流状态,提升查件效率与使用体验。

27

2026.02.02

Golang WebAssembly(WASM)开发入门
Golang WebAssembly(WASM)开发入门

本专题系统讲解 Golang 在 WebAssembly(WASM)开发中的实践方法,涵盖 WASM 基础原理、Go 编译到 WASM 的流程、与 JavaScript 的交互方式、性能与体积优化,以及典型应用场景(如前端计算、跨平台模块)。帮助开发者掌握 Go 在新一代 Web 技术栈中的应用能力。

11

2026.02.02

PHP Swoole 高性能服务开发
PHP Swoole 高性能服务开发

本专题聚焦 PHP Swoole 扩展在高性能服务端开发中的应用,系统讲解协程模型、异步IO、TCP/HTTP/WebSocket服务器、进程与任务管理、常驻内存架构设计。通过实战案例,帮助开发者掌握 使用 PHP 构建高并发、低延迟服务端应用的工程化能力。

5

2026.02.02

Java JNI 与本地代码交互实战
Java JNI 与本地代码交互实战

本专题系统讲解 Java 通过 JNI 调用 C/C++ 本地代码的核心机制,涵盖 JNI 基本原理、数据类型映射、内存管理、异常处理、性能优化策略以及典型应用场景(如高性能计算、底层库封装)。通过实战示例,帮助开发者掌握 Java 与本地代码混合开发的完整流程。

5

2026.02.02

go语言 注释编码
go语言 注释编码

本专题整合了go语言注释、注释规范等等内容,阅读专题下面的文章了解更多详细内容。

62

2026.01.31

go语言 math包
go语言 math包

本专题整合了go语言math包相关内容,阅读专题下面的文章了解更多详细内容。

55

2026.01.31

go语言输入函数
go语言输入函数

本专题整合了go语言输入相关教程内容,阅读专题下面的文章了解更多详细内容。

27

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP函数之array数组函数视频讲解
PHP函数之array数组函数视频讲解

共76课时 | 26.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号