99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

CodeIgniter 讀取新聞條目

2018-07-21 15:36 更新

讀取新聞條目

在上一節(jié)中,我們通過(guò)寫(xiě)出一個(gè)包含靜態(tài)頁(yè)面的類(lèi)了解了一些框架的基本概念, 我們也根據(jù)自定義路由規(guī)則來(lái)重定向 URI ?,F(xiàn)在是時(shí)候向大家介紹動(dòng)態(tài)內(nèi)容 和如何使用數(shù)據(jù)庫(kù)了。

創(chuàng)建你的數(shù)據(jù)模型

數(shù)據(jù)庫(kù)的查詢(xún)操作應(yīng)該放在模型里,而不是寫(xiě)在控制器里,這樣可以很方便的重用它。 模型正是用于從數(shù)據(jù)庫(kù)或者其他存儲(chǔ)中獲取、新增、更新數(shù)據(jù)的地方。它就代表你的數(shù)據(jù)。

打開(kāi) application/models/ 目錄,新建一個(gè)文件 News_model.php ,然后寫(xiě)入下面的代碼。 確保你的 數(shù)據(jù)庫(kù)配置 正確。

<?php
class News_model extends CI_Model {

    public function __construct()
    {
        $this->load->database();
    }
}

這個(gè)代碼和之前的控制器的代碼有點(diǎn)類(lèi)似,它通過(guò)繼承 CI_Model 創(chuàng)建了一個(gè)新模型, 并加載了數(shù)據(jù)庫(kù)類(lèi)。數(shù)據(jù)庫(kù)類(lèi)可以通過(guò) $this->db 對(duì)象訪(fǎng)問(wèn)。

在查詢(xún)數(shù)據(jù)庫(kù)之前,我們要先創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)表。連接你的數(shù)據(jù)庫(kù),運(yùn)行下面的 SQL 語(yǔ)句 (MySQL),并添加一些測(cè)試數(shù)據(jù)。

CREATE TABLE news (
    id int(11) NOT NULL AUTO_INCREMENT,
    title varchar(128) NOT NULL,
    slug varchar(128) NOT NULL,
    text text NOT NULL,
    PRIMARY KEY (id),
    KEY slug (slug)
);

現(xiàn)在,數(shù)據(jù)庫(kù)和模型都準(zhǔn)備好了,你需要一個(gè)方法來(lái)從數(shù)據(jù)庫(kù)中獲取所有的新聞文章。 為實(shí)現(xiàn)這點(diǎn),我們使用了 CodeIgniter 的數(shù)據(jù)庫(kù)抽象層 查詢(xún)構(gòu)造器 , 通過(guò)它你可以編寫(xiě)你的查詢(xún)代碼,并在 所有支持的數(shù)據(jù)庫(kù)平臺(tái) 上運(yùn)行。 向你的模型中添加如下代碼。

public function get_news($slug = FALSE)
{
    if ($slug === FALSE)
    {
        $query = $this->db->get('news');
        return $query->result_array();
    }

    $query = $this->db->get_where('news', array('slug' => $slug));
    return $query->row_array();
}

通過(guò)這個(gè)代碼,你可以執(zhí)行兩種不同的查詢(xún),一種是獲取所有的新聞條目,另一種 是根據(jù)它的 slug 來(lái)獲取新聞條目。你應(yīng)該注意到,$slug 變量在執(zhí)行查詢(xún)之前 并沒(méi)有做檢查, 查詢(xún)構(gòu)造器 會(huì)自動(dòng)幫你檢查的。

顯示新聞

現(xiàn)在,查詢(xún)已經(jīng)寫(xiě)好了,接下來(lái)我們需要將模型綁定到視圖上,向用戶(hù)顯示新聞條目了。 這可以在之前寫(xiě)的 Pages 控制器里來(lái)做,但為了更清楚的闡述,我們定義了一個(gè)新的 News 控制器,創(chuàng)建在 application/controllers/News.php 文件中。

<?php
class News extends CI_Controller {

    public function __construct()
    {
        parent::__construct();
        $this->load->model('news_model');
        $this->load->helper('url_helper');
    }

    public function index()
    {
        $data['news'] = $this->news_model->get_news();
    }

    public function view($slug = NULL)
    {
        $data['news_item'] = $this->news_model->get_news($slug);
    }
}

閱讀上面的代碼你會(huì)發(fā)現(xiàn),這和之前寫(xiě)的代碼有些相似之處。首先是 __construct() 方法,它調(diào)用父類(lèi)(CI_Controller)中的構(gòu)造函數(shù),并加載模型。這樣模型就可以 在這個(gè)控制器的其他方法中使用了。另外它還加載了 URL 輔助函數(shù) , 因?yàn)槲覀冊(cè)诤竺娴囊晥D中會(huì)用到它。

其次,有兩個(gè)方法用來(lái)顯示新聞條目,一個(gè)顯示所有的,另一個(gè)顯示特定的。 你可以看到第二個(gè)方法中調(diào)用模型方法時(shí)傳入了 $slug 參數(shù),模型根據(jù)這個(gè) slug 返回特定的新聞條目。

現(xiàn)在,通過(guò)模型,控制器已經(jīng)獲取到數(shù)據(jù)了,但還沒(méi)有顯示。下一步要做的就是, 將數(shù)據(jù)傳遞給視圖。

public function index()
{
    $data['news'] = $this->news_model->get_news();
    $data['title'] = 'News archive';

    $this->load->view('templates/header', $data);
    $this->load->view('news/index', $data);
    $this->load->view('templates/footer');
}

上面的代碼從模型中獲取所有的新聞條目,并賦值給一個(gè)變量,另外頁(yè)面的標(biāo)題賦值給了 $data['title'] 元素,然后所有的數(shù)據(jù)被傳遞給視圖?,F(xiàn)在你需要?jiǎng)?chuàng)建一個(gè)視圖文件來(lái) 顯示新聞條目了,新建 application/views/news/index.php 文件并添加如下代碼。

<h2><?php echo $title; ?></h2>

<?php foreach ($news as $news_item): ?>

    <h3><?php echo $news_item['title']; ?></h3>
    <div class="main">
        <?php echo $news_item['text']; ?>
    </div>
    <p><a href="<?php echo site_url('news/'.$news_item['slug']); ?>">View article</a></p>

<?php endforeach; ?>

這里,通過(guò)一個(gè)循環(huán)將所有的新聞條目顯示給用戶(hù),你可以看到我們?cè)?HTML 模板中混用了 PHP , 如果你希望使用一種模板語(yǔ)言,你可以使用 CodeIgniter 的 模板解析類(lèi) , 或其他的第三方解析器。

新聞的列表頁(yè)就做好了,但是還缺了顯示特定新聞條目的頁(yè)面,之前創(chuàng)建的模型可以很容易的 實(shí)現(xiàn)該功能,你只需要向控制器中添加一些代碼,然后再新建一個(gè)視圖就可以了?;氐?nbsp;News 控制器,使用下面的代碼替換掉 view() 方法:

public function view($slug = NULL)
{
    $data['news_item'] = $this->news_model->get_news($slug);

    if (empty($data['news_item']))
    {
        show_404();
    }

    $data['title'] = $data['news_item']['title'];

    $this->load->view('templates/header', $data);
    $this->load->view('news/view', $data);
    $this->load->view('templates/footer');
}

我們并沒(méi)有直接調(diào)用 get_news() 方法,而是傳入了一個(gè) $slug 參數(shù), 所以它會(huì)返回相應(yīng)的新聞條目。最后剩下的事是創(chuàng)建視圖文件application/views/news/view.php 并添加如下代碼 。

<?php
echo '<h2>'.$news_item['title'].'</h2>';
echo $news_item['text'];

路由

由于之前創(chuàng)建的通配符路由規(guī)則,你需要新增一條路由來(lái)顯示你剛剛創(chuàng)建的控制器, 修改你的路由配置文件(application/config/routes.php)添加類(lèi)似下面的代碼。 該規(guī)則可以讓請(qǐng)求訪(fǎng)問(wèn) News 控制器而不是 Pages 控制器,第一行可以讓 帶 slug 的 URI 重定向到 News 控制器的 view() 方法。

$route['news/(:any)'] = 'news/view/$1';
$route['news'] = 'news';
$route['(:any)'] = 'pages/view/$1';
$route['default_controller'] = 'pages/view';

把瀏覽器的地址改回根目錄,在后面加上 index.php/news 來(lái)看看你的新聞頁(yè)面吧。

以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)