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

[视图] 问一个比较我不好描述的问题,关于视图公用

[复制链接]
发表于 2010-8-19 01:56:28 | 显示全部楼层 |阅读模式
恩,我研究了论坛里淡水《CodeIgniter使用 layout library 简化视图布局》以及另外 的一篇超级无敌钩子实现layout布局的帖子,但是现在很多东西都做完了,短期内不打算重新把视图用这种方法改一遍。
我的需求是,在每个页面的下面都有友情链接,如果按照常规的方式就得在每次 渲染视图的时候都要查询一次数据库,然后渲染。
但是这样做的话真的是太可怕了!
我直觉是应该用钩子,但是对钩子本身并不是很熟悉,没用过,我自己的代码是这样的:
config:
PHP复制代码
<?php  if ( ! 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复制代码
 
<?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复制代码
 
<?php foreach ($friend_link as $row) :?>
………………
<?php endforeach ?>
 
 
复制代码


引入:<?php load_view('_footer');?>

但是执行不成功。求助!
发表于 2010-8-19 08:55:33 | 显示全部楼层
本帖最后由 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扩展成一个功能丰富完善优雅的自用框架很有必要,如果你经常用它开发的话.
发表于 2010-8-19 09:52:28 | 显示全部楼层
你用 HMVC 试试。。。。
 楼主| 发表于 2010-8-19 14:39:24 | 显示全部楼层
回复 2# ares333


    多谢指点,你说的我得实践一下才明白,平时没用过这些特性呵呵。
   你最后一句的观点我非常认同,就如操作系统一样,安装好了还得自己仔细调教调教才能用的得心应手。深有感触啊。

    O(∩_∩)O谢谢
 楼主| 发表于 2010-8-19 14:39:39 | 显示全部楼层
回复 3# Hex


    老大好
 楼主| 发表于 2010-8-19 14:42:07 | 显示全部楼层
回复 2# ares333


    你说的完全正确!我的确是按照你所说的方式引用的。报错是有,是说该变量没有被定义。foreach也无法循环。当然,这个跟你说的没有区别。的确是这个意思。
    我暂时只是在首页上显示友链,其他页面全部放弃了,你说的方法我得自己实践一下才明白。
    HMVC的话,我观察论坛里的情况,似乎暂时还不够好,而且还得重新对项目做大的改动,暂时不予考虑了。
发表于 2010-8-19 22:42:28 | 显示全部楼层
回复 6# snllll


    HMVC的话我自己写了一个,也是演化了几个版本之后最终确定下来的,已经稳定运行在两个站点,综合来讲我认为这一定是你想要的HMVC(我个人认为没有更好的了 ),等你用到的时候再说吧
 楼主| 发表于 2010-8-20 02:44:43 | 显示全部楼层
回复 7# ares333


    回头一定要仔细研究下你的和hex的HMVC的知识。
发表于 2010-8-21 12:34:55 | 显示全部楼层
那啥,简单的公用footer写个lib将生成的view写到文件,定期更新,视图里面引用这个lib就好了
我footer侧边menu之类都是用这玩意做的
 楼主| 发表于 2010-8-22 06:52:08 | 显示全部楼层
回复 9# visvoy


    这个的确是个很高效的办法! :)

本版积分规则