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

[HELP] 如何得到 Header 中的變量?

[复制链接]
发表于 2011-6-15 00:00:38 | 显示全部楼层 |阅读模式
各位前輩好, 小弟來自香港區, 在用 CodeIgniter 上遇到些問題, 希望可以指點一下。

話說我以前做 php 都分成 3 塊 - header.php , main.php , footer.php

再用 rquire_once 或 include_once 將他們結合

而 header.php 主要放置判斷是否登入, 選單及判斷 Cookies 而出現用戶選擇的語言

我找了很多文章, 看了 HMVC , 但也許我對 CI 實在不太熟, 搞不清楚概代, 我現在假要弄 3 頁

就要有

index.php, index_view.php

about.php, about_view.php

contact.php, contact_view.php

header.php (放在 View)

footer.php (放在 View)

那我每頁都要引入 header.php 及 footer.php

如 About , 那假設我要跟手冊一樣加個動態 $data , 豈不是每個頁面都要寫一次
$data['title'] = xxx;

PHP复制代码
<?php
 
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 
class About extends CI_Controller {
 
    public function index(){        
         
        // layout part
        $this->load->view('header');
        $this->load->view('about_view');
        $this->load->view('footer');
    }
}
 
/* End of file about.php */
复制代码



但我直接寫變量在 header.php, 在 about_view.php 又無法使用
所以頭大了....

還是通常用 CI , 都是一頁 content.php 完成, 所有 index, about, contact 都寫進去?
那網址是 index/about ?  index/index ?  index/contact?


實在搞不懂, 有勞各前輩指教

发表于 2011-6-15 08:53:29 | 显示全部楼层
本帖最后由 spt119 于 2011-6-15 08:54 编辑

楼主这个需求,helper解决不了。
如果公共文件(header或footer)有数据库读取的,楼主可以自行写个类文件,放到application/libraries下。把一些公共元素,在这个类里边定义。然后在各个控制器(controller)里加载这个类就可以了。
如果公共文件没有数据读取的,可以尝试使用定义一个helper。
还有一种在论坛中的hmvc模式,可以搜索一下。
个人认为,最简单的方式,就是自己写个类文件。在不同的控制器中,一行代码调用。再有,如果用这个方法,这个类的引用,最好在构造函数中。
发表于 2011-6-15 10:43:31 | 显示全部楼层
第一种办法:你可以用HMVC实现,去论坛上搜下
第二种办法:我用的是1.73版本 在libraries文件夹下建立一个 busComm 类  里面放了 herder 和fooder  以及共同的方法。
然后在autoload 文件里$autoload['libraries']=array(busComm) *注意是类名

希望对你有帮助
发表于 2011-6-15 10:46:55 | 显示全部楼层
在config的autoload中加载的方式最好慎用。
否则在一些ajax操作时,会出现异常。
 楼主| 发表于 2011-6-15 11:47:37 | 显示全部楼层
謝謝兩位前輩的指導,估計 libraries 最簡單
HMVC 我看了幾篇,還沒完全理解,也許要再深入理解 CI 先才行

問多前輩一下,那我目前的分頁是正常的吧? 就是假設 3 頁內頁
就每個頁面一個 Controller 及一個 View?

因為我下載了一些模版,有不少是一個 Controller 對 N 個 View
发表于 2011-6-16 09:07:03 | 显示全部楼层
你這個問題昨天看了看,在手冊上說,多個視圖傳值,只需要在第一個視圖中傳遞就OK了。你試試吧
 楼主| 发表于 2011-6-16 13:18:12 | 显示全部楼层
xushre 发表于 2011-6-16 09:07
你這個問題昨天看了看,在手冊上說,多個視圖傳值,只需要在第一個視圖中傳遞就OK了。你試試吧 ...

Xushre 兄,

這個我也看了,但好像是發生在同一個 controller php 才行

如果的 about.php , contact.php 都要引入 header
那 header 的 data 還是要寫在其他頁面
发表于 2011-6-16 13:24:54 | 显示全部楼层
本帖最后由 xushre 于 2011-6-16 13:25 编辑

可以用一個共用的C来调用一个V,然后在其他的C里面调用那个C就可以了啊
 楼主| 发表于 2011-6-16 13:30:39 | 显示全部楼层
C 也可以 load C?

請教一下如何 C內 load C?
发表于 2011-6-16 13:45:59 | 显示全部楼层
用繼承不就可以了?比如我有一個user模板,裡面肯定會有一個公用的名為User的控制器,然後在用戶要
進行操作的控制器裡面直接繼承User這個控制器,就可以少很多的重複了

本版积分规则