2011-09-28 94 views
1

我可以在視圖文件中設置變量嗎?Codeigniter - 在視圖中設置變量

的爲例: 我有一個控制器:的welcome.php 其負載:

$this->load->view('header'); 
$this->load->view('main'); 
$this->load->view('footer'); 

我需要設置一個變量上的文件main.php,並獲得footer.php

它的可能嗎?

+0

你的意思是你想在視圖中設置一個變量以備後用?因爲,當然,您可以使用標準PHP在HTML中設置變量:'<?php $ some_variable ='某個值'; ?>'。 – Alex

回答

3

無法在視圖文件中設置變量並從另一個視圖文件訪問變量。沒有理由你應該在你的視圖文件中設置變量。控制器應該處理所有的應用程序邏輯,所以你應該在那裏設置變量。我會建議閱讀用戶指南或閱讀一些文章以更好地理解MVC原則。

要訪問多個視圖中的相同變量,請將其傳遞給您加載的每個視圖。

// Set your variable 
$data['variable'] = 'value'; 

// Pass variable to multiple views 
$this->load->view('main', $data); 
$this->load->view('footer', $data); 
+0

你可以在一個視圖中設置一個變量,並在另一個視圖中使用它。我一直這樣做。我在下面發佈了我的答案。 –

+0

這並不總是關於模型相關的變量,是古典的。例如,我使用它來設置「內容」視圖中某些javascript的名稱,然後在所有HTML內容之後將這些文件加載​​到頁腳視圖中。 –

1

您可以通過這兩個陣列對象到您的視圖,例如:

$data = new StdClass; 
$data->title = "The Title"; 
$data->content = "The Content"; 

$this->load->view('main', $data); 

$data = new SomeClass; 
$this->load->view('main', $data); 

此外,在各查看您都能夠通過不同的數據:

$data1 = array("key" => "val"); 
$data2 = $this->some_class->some_method($params); 
$data3 = $this->another_class->another_method($params); 

$this->load->view('navigation', $data1); 
$this->load->view('main', $data2); 
$this->load->view('footer', $data3); 
5

您可以像從控制器到視圖一樣將變量從一個視圖傳遞到另一個視圖。你只需要加載設置一個變量,使用視圖前視圖文件變量:

$this->load->view('main'); //load before 
$this->load->view('footer'); //load after 

內main.php做$this->load->vars(array('your_variable'=>'it's value'));,你就可以調用它在頁腳像對其他任何變量。唯一的要求是在footer.php之前加載main.php。

+0

在視圖內部設置變量並不是一個好習慣。如果你打算使用這種方法,最好從控制器調用'$ this-> load-> vars()'而不是視圖,這樣你就不用擔心你的順序了加載視圖。 – birderic

+2

@birderic絕對。我只是在極端情況下這樣做。但問題不在於最佳實踐,而在於如何從視圖加載變量。 –