科技企业网站(8) - 后台管理模块设计

1.Framework框架技术
后台模块的设计理念是,将所有的操作都放置在同一页面中,么米有不同页面的跳转功能。然后根据不同数据层面之间,用控制器来控制哪些数据层面应该显示,哪些数据层面应该隐藏。这里需要一个Framework,即框架的理念。所有的功能体现,都交由控制器中Framework控制实现,然后指定单一的其他控制器类进行逻辑处理。也就是说,管理员看见的后台界面都是由Framework自动调配的。Framework框架关键代码如下:

public function framework(){
        // 如果当前的SESSION值与登录界面传递的数据相同
        if(session('PHP') == 'phper_ym@163.com'){
            $string = I('id');                      // 接收页面传递的参数
            switch($string){                               // 分支语句
                case "addNews":
                    $this->assign('language_1',"block");        // 指定显示的逻辑层
                    $this->display('adminIndex');   // 指向页面
                    break;
                case "updateNews":
                    $this->assign('language_2',"block");    //  指定显示的逻辑层
                    $this->assign('language_1',"none");     // 指定隐藏的逻辑层
                    $this->display('adminIndex');           // 指向页面
                    break;
                case 'viewUpdateNews':
                    $new = D("News");               // 实例化模型
                    $data = $new->select();         // 执行查询

                    $count = $new->count();         // 查询满足要求的总记录数
                    // 实例化分页类,传入总记录数和每页显示的记录数
                    $Page = new \Think\Page($count,3);
                    $show = $Page->show();          // 分页显示输出

                    $list = $new->order('id')->limit($Page->firstRow.','.$Page->listRows)->select();
                    $this->assign('pc',$list);    // 赋值数据集

                    $this->assign('page',$show);    // 赋值分页输出
                    $this->assign('language_3',"block");
                    $this->assign('language_1',"none");
                    $this->display('adminIndex');               // 输出模板   
                    break;
                    //  省略部分代码
            }
        }else{
            $this->assign('hint','您没有操作权限');
            $this->assign('url','__URL__/admin');
            $this->display('information');
        }
    }

2.更改密码和项目所需数据表的操作
更改密码关键代码如下:

// 密码更改操作
    public function change(){
        // 判断是否通过SESSION验证
        if(session('PHP') == "phper_ym@163.com"){

            // 接收表单传递的数据
            $string = I('pwd');
            $stringg = I('pwdd');
            // 判断两次输入的密码是否相同
            if($string == $stringg){
                $pc = M('admin');                       // 实例化基础模型类
                define(PHP,'_php');                     // 定义常量
                $pc = $pc->where('id');                 // 取得数据表中数据
                $data['pwd'] = md5($string."_php");     //  MD5加密
                $pc = $pc->where('id=1')->data($data)->save();  // 执行更新操作
                $this->assign('hint','更改密码成功');
                $this->assign('url','__URL__/adminIndex');
                $this->assign('language_1',"block");
                $this->display('informaton'); 
            }else{
                $this->assign('hint','两次密码输入不一致');
                $this->assign('url','__URL__/adminIndex');
                $this->assign('language_1',"block");
                $this->display('information');
            }

        }else{
            $this->assign('hint','您没有操作权限');
            $this->assign('url','__URL__/admin');
            $this->display('information');
        }
    }

在Framework中完成项目所需数据表,关键代码如下:

 // 项目所需数据表
                case "back":
                    $pc = M('project');     // 实例化模型
                    $pc = $pc->query('show tables');        // 执行SQL查询



                    $this->assign("type","block");          // 设置模块显示
                    $this->assign('list',$pc);              // 向模板中传递数据
                    // $this->display('adminIndex');           // 模板指向
                break; 

3.左侧功能菜单区
利用CSS+DIV技术结合HTML标签编写功能菜单布局和样式修订,将每个列表内容都用

模块包含其中,并利用display属性设置所有标题的子类模块隐藏。然后对 链接标签的地址进行设置,并实现指向控制器中的某个方法。页面布局关键代码如下:

<div class="left">
      <div class="leftLi">增加新闻</div>
      <div class="liDiv">
        <ul class="liDivUl">
            <li>
              <a href="__URL__/framework/id/addNews">单条增加新闻</a>
            </li>
        </ul>
      </div>
      <div class="leftLi">更新新闻</div>
      <div class="liDiv">
        <ul class="liDivUl">
            <li><a href="__URL__/framework/id/updateNews">操作代码式更新</a></li>
            <li><a class="aHref" href="__URL__/framework/id/viewUpdateNews">操作界面式更新</a></li>
        </ul>
      </div>
      <div class="leftLi">增加新书</div>
      <div class="liDiv">
          <ul class="liDivUl">
              <li><a href="__URL__/framework/id/addBook">单条增加新书</a></li>
          </ul>
      </div>
      <div class="leftLi">更新新书</div>
      <div class="liDiv">
          <ul class="liDivUl">
            <li>
              <a href="__URL__/framework/id/updateNewbook">操作代码式更新</a>
            </li>
            <li>
              <a href="__URL__/framework/id/viewUpdateNewbook">
                操作界面式更新
              </a>
            </li>
          </ul>
      </div>
   </div>

jQuery关键代码如下:
此段jQuery代码的原理是,当重复单击某个标题时,程序自动将指定模块进行显示和隐藏切换。

 <script>
          $(function(){
            // 除指定区块的第一个外都设置为隐藏属性
            $(".liDiv:gt(0)").hide();

            // 标题切换单击
            $(".leftLi").toggle(function(){
              $(".liDiv").hide();
              // 指定模块的下一级模块淡入效果显示
              $(this).next('.liDiv').fadeIn("fast");
            },function(){
              $(this).next('.liDiv').hide();    // 当前对象的下个li隐藏
              $('.liDiv:not(:first)').hide();   // 不是第一个的标签隐藏
              $('.liDiv:first').fadeIn("fast"); // 第一个标签淡入显示
            });
          });
      </script>

4.右侧操作内容显示区
(1)当管理员单击某个功能链接时,右侧的操作内容显示区会自动切换到对应的操作界面中来。笔者以“操作界面式更新”的功能选项为例。当功能按钮被单击时,程序首先将指令传递到控制器中的framework方法中来。framework方法接收参数,利用switch语句比对case值,比对成功后,控制器再次将数据传递到view视图层,即模板文件。传递的最主要数据是指定将页面中定义的display属性值$language_3赋值为block,设置其显示,进而具有操作权限。此部分内容的核心代码如下:

<div class="right_3" style="display:{$language_3}"></div>

(2)当页面显示成功后就可以进行对应的修改和删除操作了。执行这两个步骤的操作主要是在ThinkPHP的控制器中完成的。View层的代码如下:

adminIndex.html关键代码如下:

<table align="center">
        <!-- 接收控制器传递的参数,循环输出数据 -->
        <volist name="pc" id="pList">
            <tr>
                <td style="border:1px solid white;" width="50px">
                    {$pList.id}
                </td>
                <td style="border:1px solid white" width="500px">
                    {$pList.title|msubstr=0,30}...
                </td>
                <td width="100px" style="border:1px solid white">
                    <a href="__URL__/update/newIdUpdate/{$pList.id}">编辑</a>|
                    <a href="__URL__/delete/newIdDelet/{$pList.id}">删除</a>
                </td>
            </tr>
        </volist>
        <tr>
            <td colspan="3">{$page}</td>
        </tr>
    </table>

(3)当编辑按钮被单击时,程序会将指定的数据传递到控制器层的update方法中,并同时传递一条数据主键ID的值。
update方法关键代码如下:

 public function update(){
        $string = I('newIdUpdate');         // 接收传递进来的ID的值
        $pc = M('news');                    // 实例化基础模型类
        $pc = $pc->where('id='.$string)->select();      // 执行指定id的查询操作
        print_r($pc);

        // 为模板变量赋值
        $this->assign('head',$pc[0]['id']);
        $this->assign('title',$pc[0]['title']);
        $this->assign('head',$string);
        $this->assign('content',$pc[0]['content']);
        $this->assign('time',$pc[0]['date_time']);

        // 设置模块language_4的display属性值为block
        $this->assign('language_4','block');
        $this->assign('language_3','none');
        $this->assign('language_1','none');
        $this->display('adminIndex');       // 模板指向adminIndex页面
    }

(4)由于控制器完成这部分的操作后,隐藏了原有控制页面,显示了新的操作页面。也就是说,控制器此步骤的操作是将控制权重重新赋予到新模块页面,此模块为

标记中class属性值为”right_4”的模块。此模块的view层代码如下:

 <!-- 模板中的变量全部由控制器update方法提供 -->
       <div class="right_4" style="display:'{$language_4}'">
           <form action="__URL__/adminUpdate" method="post">
                <input type="hidden" name="head" value="{$head}" />
                新闻标题:<input class="inputOne" type="text" name="title" value="{$title}" /><br />
                新闻内容:<textarea name="textarea" class="inputTwo">{$content}</textarea><br />
                发布时间:<input type="text" class="inputOne" name="time" value="{$time}" />
                <input type="submit" value="更新" />
            </form>
       </div>

(5)当更新按钮被单击之后,程序又再次指向控制器的adminUpdate方法,从而执行更新操作。其控制器关键代码如下:

public function adminUpdate(){
        // 获取接收的文本框信息
        $data['title'] = I('title');
        $data['content'] = I('content');
        $data['date_time'] = I('time');
        $id = I('head');
        $data['update_time'] = date('Y-m-d');
        $pc = M('news');        // 实例化基础模型类
        $pc = $pc->where('id='.$id)->data($data)->save();       // 执行更新操作
        if($pc != false){
            $this->assign('hint','更新成功');
            $this->assign('url','__URL__/adminIndex');
            $this->display('information');
        }else{
            $this->assign('hint','更新失败');
            $this->assign('url','__URL__/adminIndex');
            $this->display('information');
        }
    }

总结:
运用软件工程的设计思想中最流行的MVC设计理念,通过一个业界比较有名的国产框架编写而成。通过对这个项目的学习,可以了解到PHP网站程序的开发流程,并且了解ThinkPHP框架三层开发的具体事宜。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值