CI框架 讀取新聞條目

2021-07-17 05:24:19 字數 3993 閱讀 8535

在上一節中,我們通過寫出乙個包含靜態頁面的類了解了一些框架的基本概念, 我們也根據自定義路由規則來重定向 uri 。現在是時候向大家介紹動態內容 和如何使用資料庫了。

資料庫的查詢操作應該放在模型裡,而不是寫在控制器裡,這樣可以很方便的重用它。 模型正是用於從資料庫或者其他儲存中獲取、新增、更新資料的地方。它就代表你的資料。

<?

phpclass

news_model

extends

ci_model

}

這個**和之前的控制器的**有點類似,它通過繼承 ci_model

建立了乙個新模型, 並載入了資料庫類。資料庫類可以通過 $this->db

物件訪問。

在查詢資料庫之前,我們要先建立乙個資料庫表。連線你的資料庫,執行下面的 sql 語句(mysql),並新增一些測試資料。

create

table

news(id

int(11)

notnull

auto_increment

,title

varchar

(128

)not

null

,slug

varchar

(128

)not

null

,text

text

notnull

,primary

key(

id),

keyslug

(slug

));

現在,資料庫和模型都準備好了,你需要乙個方法來從資料庫中獲取所有的新聞文章。 為實現這點,我們使用了 codeigniter 的資料庫抽象層 查詢構造器 , 通過它你可以編寫你的查詢**,並在 所有支援的資料庫平台 上執行。 向你的模型中新增如下**。

public

function

get_news

($slug

=false

)$query

=$this

->

db->

get_where

('news'

,array

('slug'

=>

$slug

));return

$query

->

row_array

();}

通過這個**,你可以執行兩種不同的查詢,一種是獲取所有的新聞條目,另一種 是根據它的 slug 來獲取新聞條目。你應該注意到,$slug

變數在執行查詢之前 並沒有做檢查, 查詢構造器 會自動幫你檢查的。

現在,查詢已經寫好了,接下來我們需要將模型繫結到檢視上,向使用者顯示新聞條目了。 這可以在之前寫的pages

控制器裡來做,但為了更清楚的闡述,我們定義了乙個新的 news

<?

phpclass

news

extends

ci_controller

public

function

index

()public

function

view

($slug

=null

)}

閱讀上面的**你會發現,這和之前寫的**有些相似之處。首先是 __construct()

方法,它呼叫父類(ci_controller

)中的建構函式,並載入模型。這樣模型就可以 在這個控制器的其他方法中使用了。另外它還載入了 url 輔助函式 , 因為我們在後面的檢視中會用到它。

其次,有兩個方法用來顯示新聞條目,乙個顯示所有的,另乙個顯示特定的。 你可以看到第二個方法中呼叫模型方法時傳入了 $slug

引數,模型根據這個 slug 返回特定的新聞條目。

現在,通過模型,控制器已經獲取到資料了,但還沒有顯示。下一步要做的就是, 將資料傳遞給檢視。

public

function

index

()

上面的**從模型中獲取所有的新聞條目,並賦值給乙個變數,另外頁面的標題賦值給了 $data['title']

<

h2><?

phpecho

$title

;?>

h2>

<?php

foreach

($news

as$news_item):

?>

<

h3>

<?php

echo

$news_item

['title'

];?>

h3>

<

divclass

="main"

>

<?php

echo

$news_item

['text'

];?>

div>

<

p><

ahref="

<?php

echo

site_url

('news/'

.$news_item

['slug'

]);?>

">view article

a>

p>

<?php

endforeach

;?>

這裡,通過乙個迴圈將所有的新聞條目顯示給使用者,你可以看到我們在 html 模板中混用了 php , 如果你希望使用一種模板語言,你可以使用 codeigniter 的 模板解析類 , 或其他的第三方解析器。

新聞的列表頁就做好了,但是還缺了顯示特定新聞條目的頁面,之前建立的模型可以很容易的 實現該功能,你只需要向控制器中新增一些**,然後再新建乙個檢視就可以了。回到 news

控制器,使用下面的**替換掉 view()

方法:

public

function

view

($slug

=null

)$data

['title']=

$data

['news_item'

]['title'

];$this

->

load

->

view

('templates/header'

,$data

);$this

->

load

->

view

('news/view'

,$data

);$this

->

load

->

view

('templates/footer'

);}

我們並沒有直接呼叫 get_news()

方法,而是傳入了乙個 $slug

<?

phpecho'';

echo

$news_item

['text'

];

控制器而不是 pages

控制器,第一行可以讓 帶 slug 的 uri 重定向到 news

控制器的 view()

方法。

把瀏覽器的位址改回根目錄,在後面加上 index.php/news 來看看你的新聞頁面吧。

CI框架(5) 資料讀取

1,資料庫引數設定 2,建立model 3,控制器獲得資料,並且傳遞引數給檢視 4,檢視顯示資料 1,資料庫引數設定 hostname 資料庫位址 username 使用者名稱 password 密碼 database 資料 2,建立model class singermodel extends c...

ci框架 CI超級物件

目錄結構說明 license.txt 許可協議 user guide 使用者手冊 system 框架核心檔案 index.php 入口檔案 mvc1.入口檔案。唯一乙個讓瀏覽器直接請求的指令碼檔案 2.控制器controller 協調模型和檢視 3.模型 提供資料,儲存資料 4.檢視view 只負責...

CI框架記錄

1.取得 session 資料 可以通過如下的函式來得到 session 陣列的任何資訊 this session userdata item item 是陣列裡的相對應資料的索引。例如,想要獲得 session id,你要使用如下的 session id this session userdata...