亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

direktori cari
歡迎 目錄 快速參考圖 基本信息 服務(wù)器要求 許可協(xié)議 變更記錄 關(guān)于CodeIgniter 安裝 下載 CodeIgniter 安裝指導(dǎo) 從老版本升級(jí) 疑難解答 介紹 開始 CodeIgniter 是什么? CodeIgniter 速記表 支持特性 應(yīng)用程序流程圖 模型-視圖-控制器 架構(gòu)目標(biāo) 教程 內(nèi)容提要 加載靜態(tài)內(nèi)容 創(chuàng)建新聞條目 讀取新聞條目 結(jié)束語(yǔ) 常規(guī)主題 CodeIgniter URL 控制器 保留字 視圖 模型 輔助函數(shù) 使用 CodeIgniter 類庫(kù) 創(chuàng)建你自己的類庫(kù) 使用 CodeIgniter 適配器 創(chuàng)建適配器 創(chuàng)建核心系統(tǒng)類 鉤子 - 擴(kuò)展框架的核心 自動(dòng)裝載資源 公共函數(shù) URI 路由 錯(cuò)誤處理 緩存 調(diào)試應(yīng)用程序 以CLI方式運(yùn)行 管理應(yīng)用程序 處理多環(huán)境 PHP替代語(yǔ)法 安全 開發(fā)規(guī)范 類庫(kù)參考 基準(zhǔn)測(cè)試類 日歷類 購(gòu)物車類 配置類 Email 類 加密類 文件上傳類 表單驗(yàn)證詳解 FTP 類 圖像處理類 輸入類 Javascript 類 語(yǔ)言類 裝載類 遷移類 輸出類 分頁(yè)類 模板解析器類 安全類 Session 類 HTML 表格類 引用通告類 排版類 單元測(cè)試類 URI 類 User-Agent 類 表單驗(yàn)證 XML-RPC 和 XML-RPC 服務(wù)器 Zip 編碼類 緩存適配器 適配器參考 適配器 數(shù)據(jù)庫(kù)類 Active Record 類 數(shù)據(jù)庫(kù)緩存類 自定義函數(shù)調(diào)用 數(shù)據(jù)庫(kù)配置 連接你的數(shù)據(jù)庫(kù) 數(shù)據(jù)庫(kù)快速入門例子代碼 字段數(shù)據(jù) 數(shù)據(jù)庫(kù)維護(hù)類 查詢輔助函數(shù) 數(shù)據(jù)庫(kù)類 查詢 生成查詢記錄集 表數(shù)據(jù) 事務(wù) 數(shù)據(jù)庫(kù)工具類 JavaScript類 輔助函數(shù)參考 數(shù)組輔助函數(shù) CAPTCHA 輔助函數(shù) Cookie Helper 日期輔助函數(shù) 目錄輔助函數(shù) 下載輔助函數(shù) Email 輔助函數(shù) 文件輔助函數(shù) 表單輔助函數(shù) HTML輔助函數(shù) Inflector 輔助函數(shù) 語(yǔ)言輔助函數(shù) 數(shù)字輔助函數(shù) 路徑輔助函數(shù) 安全輔助函數(shù) 表情輔助函數(shù) 字符串輔助函數(shù) 文本輔助函數(shù) 排版輔助函數(shù) URL 輔助函數(shù) XML 輔助函數(shù)
watak

CodeIgniter 用戶指南 版本 2.1.0

編輯文檔、查看近期更改請(qǐng) 登錄 或 注冊(cè)  找回密碼
查看原文

教程 ? 讀取新聞條目

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

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

數(shù)據(jù)庫(kù)的運(yùn)算并不是在控制類中進(jìn)行的,而是在數(shù)據(jù)模型中,這樣他們就可以在后面很容易地被反復(fù)使用。數(shù)據(jù)模型就是對(duì)你的數(shù)據(jù)庫(kù)或其他數(shù)據(jù)存儲(chǔ)方式進(jìn)行取回、插入和更新的地方,它們的功能是展示你的數(shù)據(jù)(They represent your data)。

打開 application/models 文件夾新建一個(gè)文件 news_model.php ,代碼如下。確保你已經(jīng)按照 這里的說明配置了自己的數(shù)據(jù)庫(kù)。

<?php
class News_model extends CI_Model {

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

這段代碼和早前寫過的控制器的代碼類似。它創(chuàng)建了一個(gè)繼承 CI_Model 的數(shù)據(jù)模型,并用來載入數(shù)據(jù)庫(kù)。通過 $this->db 對(duì)象就可以使用數(shù)據(jù)庫(kù)類了。

在對(duì)數(shù)據(jù)庫(kù)進(jìn)行查詢前,我們要先建一個(gè)數(shù)據(jù)表。連接你的數(shù)據(jù)庫(kù)并執(zhí)行下面的 SQL 命令,并在里面加些內(nèi)容。

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ù)和數(shù)據(jù)模型都設(shè)置好了,我們需要一個(gè)方法來把我們的文章從數(shù)據(jù)庫(kù)中讀取出來。數(shù)據(jù)庫(kù)抽象層已經(jīng)包含在CodeIgniter的 Active Record模式 中了。這樣可以確保只寫一次查詢就可以應(yīng)用到 所有的數(shù)據(jù)庫(kù)系統(tǒng)上。在你的數(shù)據(jù)庫(kù)模型中添加如下代碼。

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();
}

通過上面的代碼可以實(shí)現(xiàn)兩個(gè)不同的查詢,你可以得到所有的新聞紀(jì)錄,也可以通過 slug得到某一篇新聞。你可能注意到了 $slug 變量在查詢前并沒有被檢驗(yàn)過(sanitized),因?yàn)锳ctive Record類已經(jīng)把這個(gè)工作做完啦。

顯示新聞

既然查詢已經(jīng)寫完了,我們就要把這個(gè)數(shù)據(jù)模型和用來顯示新聞內(nèi)容的視圖聯(lián)系起來了。其實(shí)這個(gè)工作在我們之前寫的pages控制類中就可以實(shí)現(xiàn),但為了更清楚地向大家說明,我們來定義一個(gè)新的news控制類 application/controllers/news.php,代碼如下。

<?php
class News extends CI_Controller {

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

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

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

看看上面的代碼就會(huì)發(fā)現(xiàn)和我們之前寫過的文件相似。首先,__construct方法是父級(jí)類 (CI_Controller) 的構(gòu)造函數(shù),并調(diào)用了數(shù)據(jù)模型,這樣這個(gè)控制器中的其他方法就能使用那個(gè)數(shù)據(jù)模型了。

其次,這里有兩個(gè)方法分別用來顯示所有的新聞和某一條。在第二個(gè)方法中可以看到 $slug 變量被傳遞給了數(shù)據(jù)模型中的方法。數(shù)據(jù)模型就是用這個(gè)slug來確定需要返回哪一篇文章的。

現(xiàn)在通過數(shù)據(jù)模型,數(shù)據(jù)已經(jīng)被控制器獲得了,但還無法顯示出來。下面我們就要把數(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');
}

上面的代碼從數(shù)據(jù)模型中獲得了所有新聞的記錄,并把它們賦值給了一個(gè)變量。頁(yè)面的標(biāo)題也賦給了 $data['title'] ,這些所有的數(shù)據(jù)都會(huì)傳遞給視圖?,F(xiàn)在你需要?jiǎng)?chuàng)建一個(gè)視圖來顯示這些新聞。新建 application/views/news/index.php 代碼如下。

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

    <h2><?php echo $news_item['title'] ?></h2>
    <div id="main">
        <?php echo $news_item['text'] ?>
    </div>
    <p><a href="news/<?php echo $news_item['slug'] ?>">View article</a></p>

<?php endforeach ?>

在這里,每條新聞都被循環(huán)出來展示給讀者了。你可以看到我們的模板是用PHP和HTML混著寫的,如果你更喜歡用模板語(yǔ)言的話,你可以用CodeIgniter的 模板解析器類 或者第三方模板解析器(模板引擎)。

新聞概述頁(yè)面已經(jīng)做好了,現(xiàn)在還缺少每一篇文章的頁(yè)面。之前寫好的數(shù)據(jù)模型現(xiàn)在就可以非常簡(jiǎn)單地用來實(shí)現(xiàn)這個(gè)功能啦。你只需要添加一些代碼到控制器并且創(chuàng)建一個(gè)視圖。把下面的代碼添加到news控制器中。

public function view($slug)
{
  $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');
}

這里,$slug 變量作為參數(shù)傳遞給了 get_news() 方法,這樣就可以返回特定的某一篇文章了?,F(xiàn)在剩下的一件事就是創(chuàng)建視圖 application/views/news/view.php了,代碼如下。

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

設(shè)置路由

因?yàn)橹霸O(shè)置的通配符路由路由規(guī)則,現(xiàn)在你需要額外的路由來顯示剛剛寫的控制器。按照下面的代碼修改你的路由文件 (application/config/routes.php) ,這樣就確保了請(qǐng)求調(diào)用的是news控制器而不是之前設(shè)置的pages控制器。第一行代碼表示的是控制器中通過slug讀取的那條新聞。

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

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

?

翻譯貢獻(xiàn)者: Hex, irini
最后修改: 2012-02-27 23:33:57
Artikel sebelumnya: Artikel seterusnya: