Bài 25: PHP trang tin tức - Hiển thị danh sách bài viết chuyên mục

Ngày đăng: 2023-01-10 10:40:00

       Trong bài học hôm trước, chúng ta đã cùng nhau xây dựng trang hiển thị các bài viết mới nhất. Bài này mình sẽ hướng dẫn các bạn làm thế nào để tạo ra trang bài viết cho từng chuyên mục. 

Mục lục:

              1. Sửa lỗi bài học trước.

              2. Hiển thị danh sách bài viết chuyên mục

              3. Lời kết

1. Sửa lỗi bài học trước

Trước khi vào bài học, mình nói về cái lỗi ở bài học trước, đó là về cái phần lấy số hàng trong table.

Trong bài trước, câu lệnh sql của chúng ta có dạng như bên dưới:

$sqlGetCountPost = "SELECT id_post FROM posts"; (khoảng dòng số 6)

Các bạn chỉ cần thêm điều kiện WHERE status = '1' vào lệnh sql để nó chỉ đếm những bài viết đã public:

$sqlGetCountPost = "SELECT id_post FROM posts WHERE status = '1'";

Ngoài ra ở chỗ điều kiện if else kiểm tra có tồn tài bài viết (dòng 35), nến các bạn thích có thể thêm câu lệnh else bên dưới nó để tạo một cái thông báo nho nhỏ khi website của mình chưa có bài viết nào để hiển thị.

else {

        echo '<div class="well well-lg">Chưa có bài viết nào.</div>';

}

Ok thế là xong!

2. Hiển thị danh sách bài viết chuyên mục

Các bạn mở file templates/categories.php lên và copy nội dung này vào:

<?php

 

// Nhận giá trị slug của chuyên mục

$sc = trim(htmlspecialchars(addslashes($_GET['sc'])));

 

// Lấy id của chuyên mụcs

$sql_get_id_cate = "SELECT id_cate, url FROM categories WHERE url = '$sc'";

 

// Chuyên mục tồnta5i

if ($db->num_rows($sql_get_id_cate)) {

    $id_cate = $db->fetch_assoc($sql_get_id_cate, 1)['id_cate'];

 

?>

<div class="container">

    <div class="row">

    <?php

 

    // Lấy số hàng trong table

    $sqlGetCountPost = "SELECT id_post FROM posts WHERE cate_1_id = '$id_cate' OR cate_2_id = '$id_cate' OR cate_3_id = '$id_cate' AND status = '1'";

    $countPost = $db->num_rows($sqlGetCountPost);

 

    // Lấy tham số trang

    if (isset($_GET['p'])) {

      $page = trim(htmlspecialchars(addslashes($_GET['p'])));

 

      if (preg_match('/\d/', $page)) {

        $page = $page;

      } else {

        $page = 1;

      }

    } else {

      $page = 1;

    }

 

    $limit = 20; // Giới hạn số bài viết hiển thị trong 1 trang

    $totalPage = ceil($countPost / $limit); // Tổng số trang sau khi tính toán

         

    // Validate tham số page   

    if ($page > $totalPage) {

      $page = $totalPage;

    } else if ($page < 1) {

      $page = 1;

    }

       

    $start = ($page - 1) * $limit;

 

    $sql_get_latest_news = "SELECT * FROM posts WHERE status = '1' AND cate_1_id = '$id_cate' OR cate_2_id = '$id_cate' OR cate_3_id = '$id_cate' ORDER BY id_post DESC LIMIT $start, $limit";

    if ($db->num_rows($sql_get_latest_news)) {

        foreach ($db->fetch_assoc($sql_get_latest_news, 0) as $data_post) {

            echo '

                <div class="col-md-3">

                    <div class="thumbnail">

                        <a href="' . $_DOMAIN . $data_post['slug'] . '-' . $data_post['id_post'] . '.html">

                            <img src="' . $data_post['url_thumb'] . '">

                        </a>

                        <div class="caption">

                            <h3><a href="' . $_DOMAIN . $data_post['slug'] . '-' . $data_post['id_post'] . '.html">' . $data_post['title'] . '</a></h3>

                            <p>' . $data_post['descr'] . '</p>

                        </div>

                    </div>

                </div>

            ';

        }

 

        echo '</div>';

 

        echo '

            <div class="btn-toolbar" role="toolbar">

                <div class="btn-group">

        ';

 

        # Pagination button

        if ($page > 1 && $totalPage > 1) {

            echo '

                <a href="' . $_DOMAIN . ($page - 1 ) . '" class="btn btn-default">

                    <span class="glyphicon glyphicon-chevron-left"></span>

                </a>

            ';

        }

        

        for ($i = 1; $i <= $totalPage; $i++) {

            if ($i == $page){

                echo '<a class="btn btn-primary">' . $i . '</a>';

            } else {

                echo '

                    <a href="' . $_DOMAIN . $i . '" class="btn btn-default">

                        ' . $i . '

                    </a>

                ';

            }

        }

        

        if ($page < $totalPage && $totalPage > 1) {

            echo '

                <a href="' . $_DOMAIN . ($page + 1 ) . '" class="btn btn-default">

                    <span class="glyphicon glyphicon-chevron-right"></span>

                </a>

            ';

        }

 

        echo '

                </div>

            </div>

        ';

    } else {

        echo '<div class="well well-lg">Chưa có bài viết nào cho chuyên mục này.</div>';

    }

 

    ?>

</div>

<?php

 

// Chuyên mục không tồn tại

} else {

    require 'templates/404.php';

}

 

?>

Ngoài trừ có thêm phần nhận tham số get để xử lý lấy id chuyên mục thì toàn bộ hầu như giống cách lấy danh sách bài viết mới nhất, chỉ khác ở 2 câu lệnh sql lấy số hàng trong table và in danh sách. Bây giờ các bạn đang nghĩ: "Ôi sao nó đơn giản thế này nhỉ?" đúng không nào :v Ta chỉ cần theo điều kiện WHERE cate_1_id = '$id_cate' OR cate_2_id = '$id_cate' OR cate_3_id = '$id_cate' là có thể lọc các bài viết theo chuyên mục chỉ định.

Ok giờ các bạn chạy lại, chúng ta sẽ được kết quả như sau:

php trang tin tuc hien thi danh sach bai viet chuyen muc ket qua jpg

Nếu các bạn chưa có nhiều row bài, có thể thay đổi giá trị $limit để test.

3. Lời kết

      Bài học hôm nay tuy không có kiến thức mới nhiều lắm so với bài hôm trước nhưng mình hi vọng nó giúp ích được cho các bạn hiểu rõ cách thức làm thế nào để lọc bài viết theo một id chuyên mục nào . Qua bài sau, chúng ta sẽ cùng nhau xây dựng trang hiển thị nội dung bài viết cho ứng dụng này. Nếu có thắc mắc gì các bạn cứ comment bên dưới mình sẽ hỗ trợ các bạn. Cảm ơn các bạn đã theo dõi, chúc các bạn thành công!


Code games & Web Làm web tin tức căn bản bằng PHP

Bài viết trong cùng chuyên mục

Góc games giải trí



Cờ caro


Butterfly


Lật hình (luyện trí nhớ)

Cờ tướng ONLINE

Xếp hình

Ghép hình

15_PUZZLE

Kill ghosts

Banchim

Planet Defense

Tower game

Tower game

Plapy Bird (NH.Đông)

Vượt chướng ngại vật



0379136392

Thông tin liên hệ: Lê Văn Thuyên - ĐT: 0379136392 ; Gmail: lethuyen0379136392@gmail.com

Comment

 +   Lê Văn Thuyên-0379136392:Cảm ơn quý vị và các bạn đã vào Website của Lê Thuyên! Lê thuyên rất mong nhận được sự góp ý của quý vị và các bạn cho sự phát triển của website này. Xin chân thành cảm ơn!

Trả lời

 *   Dũng Trung-090567448:Lê Văn Thuyên0379136392--->Ok.Anh!

Trả lời

 *   Bé Nguyễn-benguyen@gmail,com:Lê Văn Thuyên0379136392--->Good job!

Trả lời

 +   -:

Trả lời

 +   -:

Trả lời

12843