:::

6-5-1 文章列表可顯示某一分類文章

  1. 為了讓文章可以篩選,我們修改 index.php,先進行 $cate_id 的變數過濾,並將 $cate_id 作為 index() 的第二個參數,以便在函數中可以根據該值來篩選文章。
    <?php
    use JasonGrimes\Paginator;
    require_once 'header.php';
    
    // 過濾外來變數
    ...略...
    $cate_id = isset($_REQUEST['cate_id']) ? (int) $_REQUEST['cate_id'] : 0;
    
    switch ($op) {
        ...略...
    
        // 預設為文章列表
        default:
            $all_news = index($p, $cate_id);
            $smarty->assign('all_news', $all_news);
            break;
    }

     

  2. index() 函式也要改,將 $cate_id 作為第二個參數,以便在函數中可以根據該值來篩選文章。

    // 列出所有文章
    function index($p, $cate_id = 0)
    {
        global $db;
        $where = '';
        $all_news = $value = [];
    
        // 是否要分類
        if ($cate_id) {
            $where = "WHERE `cate_id`= ?";
            $value = [$cate_id];
        }
    
        // 根據條件計算文章總數 $total
        $sql = "SELECT count(*) FROM `articles` $where ORDER BY `date` DESC";
        $sth = $db->prepare($sql);
        $sth->execute($value);
        
        ...略...
    
        // 產生分頁內容
        $paginator = new Paginator($total, $news_per_page, $p, "index.php?p=(:num)&cate_id={$cate_id}");
    
        ...略...
    
        // 根據計算結果來讀取資料
        $sql = "SELECT * FROM `articles` $where ORDER BY `date` DESC LIMIT ? , ?";
        $sth = $db->prepare($sql);
        $value[] = $start;
        $value[] = $news_per_page;
        $sth->execute($value);
    
        ...略...
        return $all_news;
    }
    1. 分頁部份,分頁的連結要多一個參數,如:"index.php?p=(:num)&cate_id={$cate_id}",如此,若是某一類的文章很多,才能針對分類換頁。
    2. 設定一個 $value 陣列來做變數綁定,在指定其值的時候,也要用陣列的格式,例如:$value = [$cate_id];
    3. 要判斷有無 $cate_id,來決定 SQL語句及$sth->execute($value); 是否要送出變數綁定
    4. 要注意的是兩個 SQL 語法都要記得加上 $where 變數,才能正確的判斷是否要篩選資料。
    5. 原本分頁的 $start$news_per_page 是寫在 SQL 語句中,為了可以做變數綁定,我們也將之依序放入 $value
    6. 如此,便能列出不同分類文章:


     

 


:::

書籍目錄

展開 | 闔起

https%3A%2F%2Fcampus-xoops.tn.edu.tw%2Fmodules%2Ftad_book3%2Fpage.php%3Ftbsn%3D52%26tbdsn%3D1845

計數器

今天: 4288428842884288
昨天: 5069506950695069
總計: 5134736513473651347365134736513473651347365134736