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

[已解决] 一个关于视图view的问题

[复制链接]
发表于 2010-1-20 20:42:24 | 显示全部楼层 |阅读模式
本帖最后由 仲夏 于 2010-1-21 14:26 编辑

初学,有些地方思维转不过弯…

网站内的网页都会有几个固定的视图,如header、footer,每次载入一个视图都要连着载入header和footer:
$this->load->view('header',$data);
$this->load->view('content',$data);
$this->load->view('footer',$data);
这样感觉很罗唆,视图一多后改起来也费劲。
此外,向视图内传递的$data中的元素,有很多都是不变的(如放在header和footer中的数据),每次载入视图前都要重新给$data的元素一个个赋值,也是相当麻烦,不利于以后维护。
有什么方法能比较优雅地载入多视图并预设好$data中的不变数据呢?
发表于 2010-1-20 20:56:11 | 显示全部楼层
放在 构造函数里 ??? 会不会有什么灵感?
发表于 2010-1-20 20:58:09 | 显示全部楼层
还有一个析构函数 里  能行不的????  我 去试试
发表于 2010-1-20 21:23:14 | 显示全部楼层
突然想了下 貌似视图本身也 可以加载视图的
 楼主| 发表于 2010-1-20 23:27:31 | 显示全部楼层
视图本身确实可以加载视图,但加载时又要传$data进去,不知能否实现?而且语句本身也不短,对于有些洁癖的我还是比较纠结呀-  -

要是能像wordpress主题模板那样直接用<?php header(); ?> <?php footer(); ?>这样简洁就好了…
我现在找到的方法是 $data['header'] = $this->load->view('header', $data, TRUE); 然后在视图里就能直接用<?php echo $header; ?>来加载header视图。不知有无更好的方法。

此外我现在急需的是楼顶提到的第二个问题,如何预载通用的$data。一般我的思路是通过某个函数来给$data赋初值:$data=auto_load_data(); ,然后再在具体的控制器里给$data加上特定的元素。但我不知如何在CI里做这函数… 即使在构造函数里做这函数的功能,那每个控制器里都要复制一遍这代码,也不利于统一管理呀。应该怎么做呢?
发表于 2010-1-20 23:50:07 | 显示全部楼层
呵呵,我也遇到过这个问题。
用hex的HMVC扩展可以相当优雅的搞定。你在论坛里搜索一下“HMVC”
 楼主| 发表于 2010-1-21 14:05:12 | 显示全部楼层
感谢。折腾了许久,终于摸清楚用法了…用了这HMVC扩展终于可以在控制器里用一行代码来载入多视图和预载数据了
发表于 2013-1-25 14:17:58 | 显示全部楼层
谢谢。试试!

本版积分规则