snllll 发表于 2010-8-19 01:56:28

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

恩,我研究了论坛里淡水《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 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扩展成一个功能丰富完善优雅的自用框架很有必要,如果你经常用它开发的话.

Hex 发表于 2010-8-19 09:52:28

你用 HMVC 试试。。。。

snllll 发表于 2010-8-19 14:39:24

回复 2# ares333

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

    O(∩_∩)O谢谢

snllll 发表于 2010-8-19 14:39:39

回复 3# Hex


    :loveliness: 老大好

snllll 发表于 2010-8-19 14:42:07

回复 2# ares333


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

ares333 发表于 2010-8-19 22:42:28

回复 6# snllll


    HMVC的话我自己写了一个,也是演化了几个版本之后最终确定下来的,已经稳定运行在两个站点,综合来讲我认为这一定是你想要的HMVC(我个人认为没有更好的了{:2_30:} ),等你用到的时候再说吧

snllll 发表于 2010-8-20 02:44:43

回复 7# ares333


    :victory: :handshake 回头一定要仔细研究下你的和hex的HMVC的知识。

visvoy 发表于 2010-8-21 12:34:55

那啥,简单的公用footer写个lib将生成的view写到文件,定期更新,视图里面引用这个lib就好了
我footer侧边menu之类都是用这玩意做的

snllll 发表于 2010-8-22 06:52:08

回复 9# visvoy


    这个的确是个很高效的办法!:handshake :)
页: [1] 2
查看完整版本: 问一个比较我不好描述的问题,关于视图公用