欢迎光临
我们一直在努力

菜鸟初学设计,希望大家多多指点,并帮助实现。谢谢-PHP教程,PHP应用

建站超值云服务器,限时71元/月

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

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

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 菜鸟初学设计,希望大家多多指点,并帮助实现。谢谢-PHP教程,PHP应用
分享到: 更多 (0)