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

[核心代码 Core] 高级视图功能,支持视图继承,多重继承,视图片段。

    [复制链接]
发表于 2011-4-22 14:51:51 | 显示全部楼层 |阅读模式
本帖最后由 kth007 于 2011-4-22 15:04 编辑

入手CI也几天了,使用过很多框架,CI 是个很不错的框架。。
他足够轻巧,扩展足够强大。。等等。好处不说了。。

说说不好的地方吧。可能应该叫国人不习惯的地方吧。

1.IDE 提示太不友好了,$this->load 什么的 可以通过外置文件实现。但实例化的类库,模型什么的 均没有提示。。
2.可能扩展太强大了,让配置有些显的繁琐了。
3.很多函数不够直观。因为很多地方没提示,让英语不好的朋友可能有些吃力。
4.就是视图了,视图功能太弱了。居然不支持载入其他视图什么的。。都要过控制器去弄。。
   视图本来就是前端开发的工作,只要遵守CI的规则,视图文件他喜欢怎么写都可以,怎么配置都可以,不用后台程序员插手。
   要不怎么体现MVC的价值呢。.

在使用过很多框架后,我个人还是喜欢QE的视图模式。

花了点时间,扩展了一下 视图功能,让他支持 继承嵌套 多重继承 和视图片段。
忘记过去控制器里写一大堆
$this->load->view('header', $data);
$this->load->view('content');
$this->load->view('footer');
......
这样太不友好了。。

新的方式 只要在控制器载入 一个内容视图就可以了。。其他的部分 让视图去继承好了。。
控制器:
PHP复制代码
$this->load->view('home/index', $data);
 
复制代码

比如: 被继承的视图,一般包括网页的布局 保存位置views/_layouts/main_layout.php
HTML复制代码
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><?php $this->_block('title'); ?>我的被别人继承的<?php $this->_endblock(); ?></title>
<script type="text/javascript" src="/static/js/jquery.js"></script>
<script type="text/javascript" src="/static/css/layout.js"></script>
<?php $this->_block('head'); ?><!--这里是载入私有的CSS和JS--><?php $this->_endblock(); ?>
</head>
<body>
<div>这里是头部</div>
<div>这里是导航</div>
<div>这里是左栏</div>
<div><!--这里是内容-->
<?php $this->load->_block('content'); ?><?php $this->load->_endblock(); ?></div>
</div>
<div>这里是尾部</div>
</body>
</html>
 
 
复制代码


内容页面:很多网页的布局都只修改了内容部分 其他不变的。
PHP复制代码
 
<?php $this->load->_extends('_layouts/main_layout'); //载入继承视图?>
 
<?php $this->load->_block('content'); //内容块开始?>
我是内容了。内容都些这里吧。。。
<?php $this->load->_endblock(); //内容块结束?>
 
<?php $this->load->_block('title'); //标题块开始?>
<!--我是需要替换的标题,标题写这里吧,也可以去掉这块,保持默认的标题-->
<?php $this->load->_endblock(); //标题块结束?>
 
<?php $this->load->_block('head'); //CSS块开始?>
<!--载入其他私有CSS和JS。如果不需要载入,可去掉该块-->
<?php $this->load->_endblock(); //标题块结束?>
 
 
复制代码


这样布局是不是很强大。一个基础视图写完布局,你可以写上多块_block
可以被所有的内容视图继承了,

当然了 多重继承也是可以了 _block 也支持多层套用。这样可以提高非常多的视图重用率

当然了还不止这些,你可以使用
PHP复制代码
 
<?php $this->load->_element('topnews', $topnews);?>
 
复制代码

来支持某个视图片段 让整体视图上某一块的调用想要的视图。
这样就不需要因为某块变动布局而重新写基础继承视图了。。

使用方法  下载MY_Loader.php 放到你的 application/core 下。其他写法没有变化

MY_Loader.rar (3.18 KB, 下载次数: 226)

评分

参与人数 2威望 +8 收起 理由
Hex + 5 我很赞同
jeongee + 3

查看全部评分

发表于 2015-4-14 17:40:36 | 显示全部楼层
我的这怎么用不了啊,提示 Undefined property: MY_Loader:_ci_view_path
发表于 2018-2-3 17:45:54 | 显示全部楼层
我的也用不了啊,提示  MY_Loader:_ci_view_path
发表于 2011-4-22 15:43:55 | 显示全部楼层
呵呵,因人而异吧~~~还是支持楼主~~~加分~~~
发表于 2011-4-22 21:59:04 | 显示全部楼层
只要是分享,就是好的,就是要支持的,加分是肯定的。

PS: CI 是可以在视图文件里 load->view() 的,不过确实缺少 layout 功能。
发表于 2011-5-9 09:26:21 | 显示全部楼层
不错,适合用在会员管理模块,后台管理模块,大家说呢
发表于 2011-5-9 09:54:27 | 显示全部楼层
支持一下
发表于 2011-6-3 13:13:53 | 显示全部楼层
很不错 值得学习!
发表于 2011-11-27 17:27:10 | 显示全部楼层
这个必须顶,正是我所需要的,我发现view的功能弱爆了
发表于 2011-11-29 12:02:52 | 显示全部楼层
支持一下下
发表于 2012-7-4 16:15:41 | 显示全部楼层
不知道效率如何????
发表于 2012-7-4 17:14:40 | 显示全部楼层
“1.IDE 提示太不友好了,$this->load 什么的 可以通过外置文件实现。但实例化的类库,模型什么的 均没有提示。。”

-----------------------------------------
这个强烈同意,特别是想我这种刚接触ci的童鞋,不了解ci的流程结构,一头雾水

本版积分规则