仲夏 发表于 2010-1-20 20:42:24

一个关于视图view的问题

本帖最后由 仲夏 于 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中的不变数据呢?

z445619791 发表于 2010-1-20 20:56:11

放在 构造函数里 ??? 会不会有什么灵感?

z445619791 发表于 2010-1-20 20:58:09

还有一个析构函数 里能行不的????我 去试试

z445619791 发表于 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里做这函数… 即使在构造函数里做这函数的功能,那每个控制器里都要复制一遍这代码,也不利于统一管理呀。应该怎么做呢?

baiyuxiong 发表于 2010-1-20 23:50:07

呵呵,我也遇到过这个问题。
用hex的HMVC扩展可以相当优雅的搞定。你在论坛里搜索一下“HMVC”

仲夏 发表于 2010-1-21 14:05:12

感谢。折腾了许久,终于摸清楚用法了…用了这HMVC扩展终于可以在控制器里用一行代码来载入多视图和预载数据了

smallhe 发表于 2013-1-25 14:17:58

谢谢。试试!
页: [1]
查看完整版本: 一个关于视图view的问题