iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 6
0
自我挑戰組

自學CodeIgniter跌跌撞撞30天系列 第 6

[ Day 6 ] CodeIgniter第二個手作:新聞列表 (2):從資料庫取出資料。

開始

老生常談之「MVC」檔案位置

檔案必須放在對的位置才會符合CI的要求,才能順利執行哦,千萬別忘了這一點!

Model :application/models
Controller:application/controllers
View :application/views

建立資料模組

在Model的資料夾下建立一個 news_model.php,並加上下列程式碼,前一篇有介紹到「資料庫載入」,我們在類別一宣告時便載入資料庫。

<?php
class News_model extends CI_Model 
{
	public function __construct()
	{
		$this->load->database();
	}
}

建立一個函數來取得資料庫的內容:

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

這裡我們來做畫面的一下想像:在列表主頁時顯示全部,點擊文章才進入單頁。
基於上方想像,我們的做法會是「當頁面沒有傳參數時顯示全部」、「傳入參數時顯示特定頁面」。
$slug就是我們的參數。判斷$slug是否為預設值FALSE來判斷頁面是否有傳入參數,接著作畫面的顯示。

建立一個框架

建立一個空的controller
後面再來細細補充他的功能。

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

程式在一開始的時候載入Model,也就是「資料庫連線」及get_news()。建立兩個畫面「全部列表」及「單頁顯示」,分別是index()及view()。

在View的目錄下建立一個news的資料夾
老生常談裡有view的路徑!
(雞婆之再貼一次:application/views)

顯示新聞列表

控制器:補上index()
首先我們要先取得資料庫的資料,並且給頁面一個名字,把這兩個丟進陣列後傳給View。並且讓畫面上顯示三種元素,「頁首」、「頁尾」、「內容」。

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

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

建立一個View
在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="view/<?php echo $news_item['slug'] ?>">View article</a></p>

<?php endforeach ?>

將View接收到的參數$new按迴圈將內容讀出並print出來。

顯示單篇新聞

控制器:補上View()
現在我們要來做「單頁」的部分,一樣從model取得資料,記得要將$slug傳入,再載入視覺頁面。

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('temp/header', $data);
	$this->load->view('news/view', $data);
	$this->load->view('temp/footer');
}

建立一個View
在View的news資料夾下建立一個view.php,加入代碼:

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

結語

CI~第一個「活」頁面完成!


上一篇
[ Day 5 ] CodeIgniter第二個手作:新聞列表 (1):設定連線 & 前置作業。
下一篇
[ Day 7 ] CodeIgniter第二個手作:新聞列表 (3):新增內容。
系列文
自學CodeIgniter跌跌撞撞30天12

尚未有邦友留言

立即登入留言