用户
 找回密码
 入住 CI 中国社区
搜索
查看: 1472|回复: 1
收起左侧

[视图] CI 局部模版实现mvc(带数据逻辑处理的模版局部块)

[复制链接]
发表于 2017-7-22 16:35:19 | 显示全部楼层 |阅读模式
之前用 symfony, 有components 功能,很好用 。
所谓components就是页面的局部比如 (页头 页脚 侧边栏) 等。
可以把模版切分部分,局部模版可以单独调用数据库 等一系列的展示逻辑,就像一个小型的mvc。
在网站任何页面调用就可以展示出来,很方便。
虽然CI 也可以在模版嵌套,如 $this->load->view("xxx"); 但是处理数据层得放到Controller里。
这样有点别扭,如果此块模版我想放到其他页面下必须在其他Controller里把这块的逻辑拿过来,
或者有的同学是放到Controller基类里,但有好多模版呢?都放到基类里?另外一些页面不需要的逻辑也会被加载。。。
于是有了想法,能不能让CI实现symfony 那样的模版呢? 只要在网站的任何页面的模版里调用一句话,就可以把数据和局部模版一同显示呢,
这样就实现了模版局部和其逻辑的独立。
找了找源代码,终于找到了实现方法。现在分享给大家!还望大家多提建议!

1.修改system/core/Common.php 底部添加一个系统函数 part (自己取名)

if ( ! function_exists('part'))
{
    function part($mc,$params=array()){
        $m=explode('/',$mc);
        if($m[0]&&$m[1]){
            $obj=&load_class(''.$m[0]);
            $result= call_user_func_array(array(&$obj, $m[1]), $params);
            echo $result;
        }else{
            echo 'part:nothing!';
        }
    }
}

2.在类库的目录里新建一个自定义类存放逻辑最好和Controller名对应便于管理(当然你可以建n多个类)
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class MY_Welcome{

   public $CI;
    function __construct(){
        $this->CI=&get_instance();
    }

    //以下为模版局部header处理
    function header($id,$index,$show,$close)
    {

       //加载模型
        $this->CI->load->model('cla');
        $ncla=& $this->CI->cla;
      //做一些处理
      ............
      //填充模版变量 演示用没有具体含义
       $view['id']='666888666'.$id.$index;
       $view['test1']='ddddd';
      
       return $this->CI->load->view("header.php",$view,true);
    }

    //...以下可以添加更多个块。。。。
}

3.模版里使用函数 part
<html>
<head>...</head>
<body>
<?php part('Welcome/header',array('id'=>'222','index'=>1,'show'=>'','close'=>false));?>

正文内容。。。

<?php part('Welcome/footer',array('id'=>'222','index'=>1,'show'=>'','close'=>false));?>
</body>
</html>


到此为止我们就完成了CI局部模版的mvc,程序不够严谨大家可以完善一下
真的喜欢CI ,用了很多框架感觉CI简单高效,还有CI的url 反向解析的实现,以及url分段中如果有必填值为空的情况的解决方案,下期介绍给大家!谢谢!

评分

参与人数 1威望 +5 收起 理由
Hex + 5 赞一个!

查看全部评分

发表于 2017-7-24 10:13:56 | 显示全部楼层
感谢楼主的分享~我也做过类似的东西,这种架构应该是 HVMC: https://github.com/hex-ci/CodeIgniter-HMVC

本版积分规则