多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php框架 > codeigniter > [PHP]如何使用CodeIgniter簡化頁面

[PHP]如何使用CodeIgniter簡化頁面

來源:程序員人生   發布時間:2013-10-07 07:36:01 閱讀次數:3830次

關于CodeIgniter的入門請參照這篇文章:[PHP]框架教程:CodeIgniter框架的簡易使用


下面介紹一下創建視圖的各種不同方法-與你的控制器和模型協同并用來顯示結果的頁面。

1編寫視圖
視圖是用戶能看到你的網站的所有。他們使用一個統一的接口,而且可以根據需要進行修改。MVC的好處之一是你分開了表示層和邏輯層,一切都顯得很干凈。

到現在為止,我們已經可以創建簡單的“welcome”頁面,現在讓我們看看該如何使它變得更精細。
視圖實際上是一組包含有你的內容的HTML結構。結構中有各種元素,如顏色,字體,文字布局等;不過視圖不關心這些,它要做的只是取來內容,顯示出來。
創建視圖,首先你需要創建一個HTML網頁的骨架,并保存為.php后綴。讓我們稱它為basic_view.php。保存在
application/views目錄中。(CI的loader會在這個目錄尋找視圖文件。)

<html><head></head><body><p>Helloworld!</p></body></html>


然后當你想要從一個控制器裝載它時,使用在某個函數中調用$this->load->view():
function index(){$this->load->view('basic_view');}


注意,如果這是一個model或者一個helper,你將會首先裝載它,然后根據需要使用它。通過視圖,調用它只需要一行代碼。
當然,那是一個空的視圖。為了要使它有用,我們需要內容。
因此我們要增加名稱和一些文本。首先我們在控制器中定義他們:

function index(){	$data['mytitle']="A website monitoring tool";	$data['mytext'] ="Test Index.";}

注意我們并沒有把它們定義為單獨的變量,而是作為數組$data的元素。對于第一個元素,鍵名是'mytitle',值是"A website monitoring tool"。

然后,我們調用裝載函數:

<?phpfunction index(){	$data['mytitle']="A website monitoring tool";	$data['mytext'] ="Test Index.";	$this->load->view('basic_view',$data);}?>


我們把$data數組作為$this->load->view()的第二個參數,在視圖名稱之后。視圖接收到$data數組后,使用PHP函數extract()把數組中的每個元素轉換成內存變量,數組的鍵名即為變量名,值為變量內所包含的值。這些變量的值能直接被視圖引用:

<html><head></head><body><h1 class="test"><?php echo$mytitle;?></h1><p class="test"><?php echo$mytext;?></p></body></html>

雖然你只能傳送一個變量到視圖,但是通過建立數組,你能把大量變量整潔地傳入視圖。它似乎復雜,但是實際上是一種緊湊和優秀的信息傳輸方式。

下面來看一下頁面的效果



2、PHP語法的長格式和短格式
在我們繼續之前,先了解一下PHP標記的兩種不同格式。常用的方式是:

<?php echo $somevariable ?>

然而,如果你不喜歡這種,CI也支持一個較短的版本:
<?=$somevariable ?>

<?php?>被<??>取代,而且echo由“=”代替,你也能用短格式來使用if,for,foreach,和while循環。
我個人偏好標準格式,因為我已習慣使用它。如果你使用短格式,注意有些服務器不能正確地解釋短格式。


3、嵌套視

為了最大程度地重用代碼,我們可以提取HTML頁面的公共部分,例如,header和footer,然后在顯示實際視圖時把它們組合起來。
讓我們創建一個視圖的header部分,這是一個符合W3C標準的header、包含HTML聲明和meta數據。
首先,我們列出header部分的代碼:

<title><?php echo $mywebtitle?></title><base href="<?php echo"$base";?>"/><meta name="robots"	content="<?php echo $myrobots?>"><link rel="stylesheet" type="text/css" href="<?php echo"$base/$css";?>"/>



把這保存為views/header_view。下面介紹它包含的變量:
$mywebtitle,是標題(meta標簽;這將不在屏幕上出現,但是搜索引擎將會讀取,每個頁面的meta有可能有變化,因此,把它設為一個變量。)
$myrobots,這個變量用來告訴機器人當前頁面不需要被編入索引。
$base和$css,描述基本網址的字符串。$css包含css文件的路徑信息,這些信息會從CI的config文件讀取(也可以用CIconfig變量site_url代替。)
現在我們需要知道:
我們如何調用嵌套視圖?
我們如何獲取變量的值?
有兩個方法可選擇。

第一,在主調用視圖中讀入其它視圖,因此我們的主視圖,也就是basic_view,應該加上一行:

<html><head><?php $this->load->view('header_view');?></head><body><h1><?php echo$mytitle;?></h1><p><?php echo$mytext;?></p></body></html>


變量可以在控制器中加上兩行:
function index(){	$data['mytitle'] = "A website monitoring tool";	$data['mytext'] = "Test Text!";	$data['myrobots'] = '<meta name="robots" content="noindex,nofollow">';	$data['mywebtitle']= 'Web monitoring tool';	$data['base'] =$this->config->item('base_url');	$data['css'] =$this->config->item('css');	$this->load->view('basic_view',$data);}

在這里新的變量$myrobots,$css,$base,$mywebtitle被創建為數組$data的新元素,當header_view被basic_view調用時,CI使用extract()解開他們,在視圖中顯示出來(在兩個視圖中不要出現同名的變量,否則會引起沖突)。


第二個方法將把視圖加入控制器里面,給它分配一個變量:

function index(){	$data['mytitle'] ="A website monitoring tool";	$data['mytext'] ="Test!Test!";	$data['myrobots'] ='<meta name="robots"	content="noindex,nofollow">';	$data['mywebtitle']='Web monitoring tool';	$data['base'] =	$this->config->item('base_url');	$data['css'] =$this->config->item('css');	$this->load->view('header_view','', TRUE);	$this->load->view('basic_view',$data);}


從嚴格的MVC設計原則來看,這樣做似乎更正確。
實際上有三個參數可傳給load->view函數。第一個,header_view,是要裝載的視圖的名字。這是必選。
第二個,是可選項,是裝入視圖的數據。第三個是布爾值。如果你不指定它,默認是FALSE,將視圖送到瀏覽器。然而,在嵌套視圖這種情況下,你需要將header_view送到主視圖basic_view中,因此需要將第三項參數設置為TRUE。
現在我們已經建立了與stylesheet的關聯,我們能夠用定義好的css中的類來更新視圖中的顯示部分:

<html><head><?php $this->load->view('header_view');?></head><body><h1 class="test"><?php echo$mytitle;?></h1><p class="test"><?php echo$mytext;?></p></body></html>


請注意CI的MVC系統能讓你分離顯示的內容。視圖只為內容提供結構,結構的風格則由cssstylesheet控制。
視圖不關心什么$mytext的內容是什么,它只是按照正確的格式在正確的位置上顯示它。定義$mytext的控制器甚至不知道(也不關心)它產生的數據如何被顯示。因此,如果我們需要改變我們網頁的外觀,或在一個不同的系統(如WAP)上顯示他們,那么我們只需要改變視圖和CSSstylesheet。我們不需要修改控制器。

而且如果我們想要改變在網頁上的信息,我們不需要去改動視圖,而是只需要改變控制器里的變量值。“松耦合”原則使設計、升級和維持你的網站比較容易。


4、網站架構的現實問題
請稍等片刻,我們在header_view中動態生成了CSS樣式表的地址:

<link rel="stylesheet"type="text/css"href="<?php echo"$base/$css";?>"/>

這意味著控制器必須生成變量的值,這些值與數據如何被顯示有關,但是我們在上面說過控制器不應該知道或者關心它們具體的值是什么。這樣不就符合了我們剛才提及的所謂'松耦合'原則?

動態地產生這些數據需要這樣一些操作:

首先,控制器必須在config文件中讀取它們,

然后控制器必須在$data數組中裝入它們而且傳送它們到視圖,

然后視圖必須解開成為內存變量$base和$css,真正使用這兩個變量的是HTML協議。
似乎這樣做太繞圈子了,為什么不直接在視圖中靜止地插入數據?

<link rel="stylesheet" type="text/css" href="http://www.mysite.com/mystylesheet.css"/>

用變量方式做這件事情的好處是:如果你遷移網站,或移動你的CSS文件,你只需要在config文件中改變設置,而且每個控制器和視圖將會立刻反映變化。而如果把CSS位置硬編碼到每個視圖的后果是一旦需要變化,你必須到每個視圖中去修改它們,明白這樣做的好處了吧?
沒有一個正確的答案。

這取決于你的優先級。關鍵是要合理運用MVC設計原則,讓它作為一種工具,而不是束縛。為此,CI給了你很大自由。

完整的項目源碼:[PHP]框架CodeIgniter的簡單測試源碼

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 欧美精品一区午夜小说 | 国产亚洲人成a在线v网站 | 看一级黄色毛片 | 五月婷婷亚洲 | 欧美亚洲综合在线观看 | 欧美性色综合网 | 中国做爰国产精品视频 | 久久99爱爱 | 日本精品一区二区在线播放 | 成人午夜视频在线播放 | 中文字幕精品一区二区三区视频 | 精品国产精品a | 久久久久毛片成人精品 | 在线高清一级欧美精品 | a久久久久一级毛片护士免费 | 一个色亚洲 | 欧美日韩不卡视频一区二区三区 | 最近最新中文字幕 | 国产片一级毛片视频 | 午夜色视频 | 中文字幕一二三区乱码老 | 视频一区二区三区自拍 | 啪一啪在线视频 | 亚洲成a人v欧美综合天 | 国产欧美久久精品 | 亚洲国产片在线观看 | 动漫羞羞网站 | 永久免费在线视频 | 91国内| 亚洲第二页 | 亚洲欧美成人中文在线网站 | 在线精品国产第一页 | 最新亚洲精品国自产在线观看 | 国内精品久久久久影院网站 | 一级做a爰片久久毛片欧美 一级做a爰片久久毛片人呢 | 国产亚洲欧美日韩综合综合二区 | 性欧美18videofreetubehd黑人 | 伊人成伊人成综合网2222 | 天堂日本 | 伊人色影院 | 免费观看欧美成人1314色 |