16 12
发新话题
打印

请问高手,如何在每个页面中都调用头文件?

本主题由 沧蓝 于 2008-4-1 19:08 移动

请问高手,如何在每个页面中都调用头文件?

比如说,我要做个blog,blog有个模板文件,分别是header.php和bottom.php,

其中模板header.php由控制器Header中output()方法解析并返回,模板bottom.php由控制器Bottom中output()方法解析并返回

那么我现在要在所有其他的控制器中输出并显示头、尾文件,是不是只能在控制器__construct()中
复制内容到剪贴板
PHP 代码:
require('/app/controllers/header.php);
echo Header::output();
然后在控制器的__desctruct()中
复制内容到剪贴板
PHP 代码:
require('/app/controllers/bottom.php);
echo Bottom::output();
这样才可以?

但是我觉得这样不太像oo的风格,而且在PHP4下不能运行(因为貌似PHP4不认识__construct()和__destruct()),有没有更好的办法?

大家一般在调用这样公共显示的部分时,是怎么做的?

谢谢。

[ 本帖最后由 shishirui 于 2008-2-14 00:25 编辑 ]

TOP

你这样不行吧?
我一般就是在视图里嵌套另外的视图。
QQ: 49489680
MSN: zhaochang_tj AT hotmail DOT com

TOP

复制内容到剪贴板
PHP 代码:
<?=$this->load->view('HeaderView')?>
如楼上说的那样,在视图里面加载另一个视图文件
Tiana's Blog
欢迎大家来我Blog交流PHP、ActionScript、Ajax、Codeigniter

TOP

哦原来这样啊

那如果'HeaderView'里面有变量,我需要把一些值赋值给变量怎么弄呢?
复制内容到剪贴板
PHP 代码:
<?=$this->load->view('HeaderView',$data)?>
$data要从数据库中取得,总不能在模板里写这段数据库操作代码吧?因为感觉不太好~

谢谢

[ 本帖最后由 shishirui 于 2008-2-14 00:25 编辑 ]

TOP

load 父视图的时候把 $data 传进去。

PS: 楼上这么写,倒是另一种方法,只是我没试过。
QQ: 49489680
MSN: zhaochang_tj AT hotmail DOT com

TOP

也可以不在view中写,
直接在Controller中调用,
传入view。

TOP

嗯,谢谢楼上和楼上,似乎现在也只有这种方法比较好了。

TOP

引用:
原帖由 shishirui 于 2008-2-14 00:23 发表
哦原来这样啊

那如果'HeaderView'里面有变量,我需要把一些值赋值给变量怎么弄呢?




$data要从数据库中取得,总不能在模板里写这段数据库操作代码吧?因为感觉不太好~

谢谢 ...
这样的写法,就等同Smarty的{include}那样,你说的传入$data,按我说的那样,HeaderView其实完全就没必要再去传入$data了,比方你在ProductsController里面调用ProductsView,并传入$data,然后ProductsView里面加载HeaderView,那么HeaderView的视图变量就是ProductsController传入的咯,而头部文件一般都有一些固定的变量值吧,那么只要在父Controller里面先设定一些固定的,然后子Controller都继承它,也就不需要再每次都去重设置值,如果需要重设,也只是用新值去覆盖掉旧的。我这样说你可能觉得很迷糊,因为之前我是用smarty,后来用ThinkPHP也是这样,一直是用这种方法。
而且楼上说的写法是一样的呀,只是写的地方不同,怎么灵活去运用才是重点:)
Tiana's Blog
欢迎大家来我Blog交流PHP、ActionScript、Ajax、Codeigniter

TOP

回复 8楼 的帖子

非常感谢您的回复。
明白了很多了,但是不知道在ci里面如何设置父Controller和子Controller?好像没有这样的功能是吗?

TOP

不需要去设置什么,是面向对象编程的设计,比方说你的全部或一些视图文件都需要加载HeaderView和FooterView,而这两个视图文件都需要设置一下东西变量之类的,你就可以写在一个Controller里面,然后用其它的Controller文件继承他,这样全部Controller都能获得同样的功能了,不必重复写同样的代码。
复制内容到剪贴板
PHP 代码:
//Base继承Controller类,然后就可以在Base里面定义一些其它Controller类都需要用到的方法和属性等等
class Base extends Controller{
    function __construct(){
        parent::Controller();
        $this->load->helper('MyHelper');
    }
    function index(){
        ......
    }
    function _createFCK(){
        ......
        $this->data['fckhtml'] = $oFCKeditor->CreateHtml();
    }
}
复制内容到剪贴板
PHP 代码:
//Home继承Base类,这样就可以获得同样的方法和属性
class Home extends Base{
}
[ 本帖最后由 tiana 于 2008-2-14 15:13 编辑 ]
Tiana's Blog
欢迎大家来我Blog交流PHP、ActionScript、Ajax、Codeigniter

TOP

原来是这样啊
恍然大悟
谢谢!!
非常感谢!!
我这就去试试去!

感谢万分!五体投地!

TOP

tiana,按照你的方法行不通

我首先在controller目录下创建了一个Base控制器:
复制内容到剪贴板
PHP 代码:
class Base extends Controller {

        protected $tdata = array();

        function base()
        {
                parent::Controller();
                $this->load->scaffolding('blogs');
                $this->load->library('blogexit');
        }

}
然后我又创建 Blog 控制器:
复制内容到剪贴板
PHP 代码:
class Blog extends Base {

        function Blog()
        {
                ...
        }

}
但是出现了错误:
复制内容到剪贴板
TEXT 代码:
Fatal error: Class 'Base' not found in D:\htdocs\ci\system\application\controllers\blog.php on line 3
请问 Base 应该在哪儿定义才可以?

[ 本帖最后由 shishirui 于 2008-2-15 10:50 编辑 ]

TOP

:P 你有没有先导入需要的类呢?
Tiana's Blog
欢迎大家来我Blog交流PHP、ActionScript、Ajax、Codeigniter

TOP

您的意思是在每个控制器前都导入一下base.php吗?
复制内容到剪贴板
PHP 代码:
require_once('base.php')
class Blog extends Base {

        function Blog()
        {
        ...        
        }

}

TOP

引用:
原帖由 shishirui 于 2008-2-15 11:02 发表
您的意思是在每个控制器前都导入一下base.php吗?
require_once('base.php')
class Blog extends Base {

        function Blog()
        {
        ...        
        }

}
是的
复制内容到剪贴板
PHP 代码:
<?php
class Base extends Controller {
    function base(){
        parent::Controller();
    }
    function index(){
        echo "index";
    }
    function test(){
        echo "test";
    }
}
?>
复制内容到剪贴板
PHP 代码:
<?php
include_once("base.php");
class Blog extends Base {
    function Blog(){
        parent::base();
    }
}
?>
[ 本帖最后由 tiana 于 2008-2-15 11:26 编辑 ]
Tiana's Blog
欢迎大家来我Blog交流PHP、ActionScript、Ajax、Codeigniter

TOP

 16 12
发新话题