Andychan 发表于 2011-6-15 00:00:38

如何得到 Header 中的變量?

各位前輩好, 小弟來自香港區, 在用 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

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?


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

spt119 发表于 2011-6-15 08:53:29

本帖最后由 spt119 于 2011-6-15 08:54 编辑

楼主这个需求,helper解决不了。
如果公共文件(header或footer)有数据库读取的,楼主可以自行写个类文件,放到application/libraries下。把一些公共元素,在这个类里边定义。然后在各个控制器(controller)里加载这个类就可以了。
如果公共文件没有数据读取的,可以尝试使用定义一个helper。
还有一种在论坛中的hmvc模式,可以搜索一下。
个人认为,最简单的方式,就是自己写个类文件。在不同的控制器中,一行代码调用。再有,如果用这个方法,这个类的引用,最好在构造函数中。

ekliu 发表于 2011-6-15 10:43:31

第一种办法:你可以用HMVC实现,去论坛上搜下
第二种办法:我用的是1.73版本 在libraries文件夹下建立一个 busComm 类里面放了 herder 和fooder以及共同的方法。
然后在autoload 文件里$autoload['libraries']=array(busComm) *注意是类名

希望对你有帮助

spt119 发表于 2011-6-15 10:46:55

在config的autoload中加载的方式最好慎用。
否则在一些ajax操作时,会出现异常。

Andychan 发表于 2011-6-15 11:47:37

謝謝兩位前輩的指導,估計 libraries 最簡單
HMVC 我看了幾篇,還沒完全理解,也許要再深入理解 CI 先才行

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

因為我下載了一些模版,有不少是一個 Controller 對 N 個 View

xushre 发表于 2011-6-16 09:07:03

你這個問題昨天看了看,在手冊上說,多個視圖傳值,只需要在第一個視圖中傳遞就OK了。你試試吧

Andychan 发表于 2011-6-16 13:18:12

xushre 发表于 2011-6-16 09:07 static/image/common/back.gif
你這個問題昨天看了看,在手冊上說,多個視圖傳值,只需要在第一個視圖中傳遞就OK了。你試試吧 ...

Xushre 兄,

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

如果的 about.php , contact.php 都要引入 header
那 header 的 data 還是要寫在其他頁面

xushre 发表于 2011-6-16 13:24:54

本帖最后由 xushre 于 2011-6-16 13:25 编辑

可以用一個共用的C来调用一个V,然后在其他的C里面调用那个C就可以了啊

Andychan 发表于 2011-6-16 13:30:39

C 也可以 load C?

請教一下如何 C內 load C?

xushre 发表于 2011-6-16 13:45:59

用繼承不就可以了?比如我有一個user模板,裡面肯定會有一個公用的名為User的控制器,然後在用戶要
進行操作的控制器裡面直接繼承User這個控制器,就可以少很多的重複了
页: [1] 2
查看完整版本: 如何得到 Header 中的變量?