问一个比较我不好描述的问题,关于视图公用
恩,我研究了论坛里淡水《CodeIgniter使用 layout library 简化视图布局》以及另外 的一篇超级无敌钩子实现layout布局的帖子,但是现在很多东西都做完了,短期内不打算重新把视图用这种方法改一遍。我的需求是,在每个页面的下面都有友情链接,如果按照常规的方式就得在每次 渲染视图的时候都要查询一次数据库,然后渲染。
但是这样做的话真的是太可怕了!
我直觉是应该用钩子,但是对钩子本身并不是很熟悉,没用过,我自己的代码是这样的:
config:
<?phpif ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------------
| Hooks
| -------------------------------------------------------------------------
| This file lets you define "hooks" to extend CI without hacking the core
| files.Please see the user guide for info:
|
| http://codeigniter.com/user_guide/general/hooks.html
|
*/
$hook['pre_controller'] = array(
'class' => 'friend_link',
'function' => 'listlink',
'filename' => 'ad_link.php',
'filepath' => 'hooks',
'params' => array()
);
/* End of file hooks.php */
/* Location: ./system/application/config/hooks.php */
钩子内容:
<?php
class friend_link{
var $obj;
function friend_link()
{
$this->obj =& get_instance();
$this->obj->load->model('Adlink_model');
}
function listlink()
{
$data['friend_link'] = $this->obj->Adlink_model->getAdlist();
}
}
视图:
_footer.php
<?php foreach ($friend_link as $row) :?>
………………
<?php endforeach ?>
引入:<?php load_view('_footer');?>
但是执行不成功。求助! 本帖最后由 ares333 于 2010-8-19 10:46 编辑
执行不成功有没有报错?我猜没有报错,不成功原因是由于$friend_link没有传递到视图中,我猜在控制器方法中是这样的,
$data=...;
$this->load->view('index.php',$data);
钩子中的$data无法传递到控制器方法中,我猜是这个原因.
如果你不打算重新把视图改一遍的话就比较麻烦了,但是还是能实现的.
我只说原理了,你因该能明白
首先钩子运行时间点改为post_controller,然后用output类的append_output()方法给视图添加一段字符串即可,期间你肯定还会用到set_output()和get_output(),因为这些方法操作的都是最重输出到浏览器的html代码,你试验一下就明白怎么回事,我就不废话了
再说一句题外话,根据自己需求和习惯把CI扩展成一个功能丰富完善优雅的自用框架很有必要,如果你经常用它开发的话. 你用 HMVC 试试。。。。 回复 2# ares333
:handshake
多谢指点,你说的我得实践一下才明白,平时没用过这些特性呵呵。
你最后一句的观点我非常认同,就如操作系统一样,安装好了还得自己仔细调教调教才能用的得心应手。深有感触啊。
O(∩_∩)O谢谢 回复 3# Hex
:loveliness: 老大好 回复 2# ares333
你说的完全正确!我的确是按照你所说的方式引用的。报错是有,是说该变量没有被定义。foreach也无法循环。当然,这个跟你说的没有区别。的确是这个意思。
我暂时只是在首页上显示友链,其他页面全部放弃了,你说的方法我得自己实践一下才明白。
HMVC的话,我观察论坛里的情况,似乎暂时还不够好,而且还得重新对项目做大的改动,暂时不予考虑了。 回复 6# snllll
HMVC的话我自己写了一个,也是演化了几个版本之后最终确定下来的,已经稳定运行在两个站点,综合来讲我认为这一定是你想要的HMVC(我个人认为没有更好的了{:2_30:} ),等你用到的时候再说吧 回复 7# ares333
:victory: :handshake 回头一定要仔细研究下你的和hex的HMVC的知识。 那啥,简单的公用footer写个lib将生成的view写到文件,定期更新,视图里面引用这个lib就好了
我footer侧边menu之类都是用这玩意做的 回复 9# visvoy
这个的确是个很高效的办法!:handshake :)
页:
[1]
2