WEB TIN TỨC PHP CĂN BẢN
Bài 1: PHP trang tin tức - Tạo database và cấu trúc folder admin Bài 2: PHP trang tin tức - Viết thư viện xử lý database admin Bài 3: PHP trang tin tức - Viết thư viện session và functions admin Bài 4: PHP trang tin tức - Kết nối database và cấu trúc index admin Bài 5: PHP trang tin tức - Xây dựng header và footer admin Bài 6: PHP trang tin tức - Tạo chức năng đăng nhập, đăng xuất admin Bài 7: PHP trang tin tức - Xây dựng sidebar, content và phân trang admin Bài 8: PHP trang tin tức - Các chức năng chuyên mục admin Bài 9: PHP trang tin tức - Các chức năng chuyên mục admin (tiếp theo) Bài 10: PHP trang tin tức - Các chức năng của hình ảnh admin Bài 11: PHP trang tin tức - Các chức năng của hình ảnh admin (tiếp theo) Bài 12: PHP trang tin tức - Các chức năng của bài viết admin Bài 13: PHP trang tin tức - Các chức năng của bài viết admin (tiếp theo) Bài 14: PHP trang tin tức - Các chức năng cài đặt admin Bài 15: PHP trang tin tức - Các chức năng của tài khoản admin Bài 16: PHP trang tin tức - Các chức năng của tài khoản admin (tiếp theo) Bài 17: PHP trang tin tức - Các chức năng của profile admin Bài 18: PHP trang tin tức - Các chức năng của profile admin (tiếp theo) Bài 19: PHP trang tin tức - Xây dựng dashboard admin và fix bug Bài 20: PHP trang tin tức - Cấu trúc folder client Bài 21: PHP trang tin tức - Kết nối database và rewrite url Bài 22: PHP trang tin tức - Xây dựng header và footer client Bài 23: PHP trang tin tức - Xây dựng layout client Bài 24: PHP trang tin tức - Hiển thị danh sách bài viết mới nhất Bài 25: PHP trang tin tức - Hiển thị danh sách bài viết chuyên mục Bài 26: PHP trang tin tức - Hiển thị nội dung bài viết Bài 27: PHP trang tin tức - Xây dựng chức năng tìm kiếm Bài 28: PHP trang tin tức - Xây dựng các trang con và clear source (End)
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
Dự án mới của mình là gamehow.net, mời anh em ghé thăm và góp ý ạ.

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

Hi, xin chào tất cả các bạn, chào mừng các bạn đã quay trở lại với series xây dựng trang web tin tức căn bản với PHP. 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. Ngày hôm nay, 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. Không luyên thuyên nữa, chúng ta bắt đầu ngay nhé!

Thực ra bài này cũng có nét tương tự giống bài  hiển thị danh sách bài viết mới nhất. Bạn nào tinh ý chắc cũng đã nghĩ ra hướng giải pháp rồi nhỉ :v

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

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 jpgNế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 hoặc đăng trên group kèm theo link bài viết để được hỗ trợ sớm nhất. Cảm ơn các bạn đã theo dõi, chúc các bạn thành công!

Cùng chuyên mục:

Hàm key_exists() trong PHP

Hàm key_exists() trong PHP

Cách sử dụng key_exists() trong PHP

Hàm mysqli_fetch_row() trong PHP

Hàm mysqli_fetch_row() trong PHP

Cách sử dụng mysqli_fetch_row() trong PHP

Hàm end() trong PHP

Hàm end() trong PHP

Cách sử dụng end() trong PHP

Hàm mysqli_field_count() trong PHP

Hàm mysqli_field_count() trong PHP

Cách sử dụng mysqli_field_count() trong PHP

Hàm count() trong PHP

Hàm count() trong PHP

Cách sử dụng count() trong PHP

Hàm mysqli_field_seek() trong PHP

Hàm mysqli_field_seek() trong PHP

Cách sử dụng mysqli_field_seek() trong PHP

Hàm compact() trong PHP

Hàm compact() trong PHP

Cách sử dụng compact() trong PHP

Hàm mysqli_field_tell() trong PHP

Hàm mysqli_field_tell() trong PHP

Cách sử dụng mysqli_field_tell() trong PHP

Hàm array_values() trong PHP

Hàm array_values() trong PHP

Cách sử dụng array_values() trong PHP

Hàm mysqli_free_result() trong PHP

Hàm mysqli_free_result() trong PHP

Cách sử dụng mysqli_free_result() trong PHP

Hàm array_unshift() trong PHP

Hàm array_unshift() trong PHP

Cách sử dụng array_unshift() trong PHP

Hàm mysqli_get_charset() trong PHP

Hàm mysqli_get_charset() trong PHP

Cách sử dụng mysqli_get_charset() trong PHP

Hàm array_shift() trong PHP

Hàm array_shift() trong PHP

Cách sử dụng array_shift() trong PHP

Hàm mysqli_get_client_stats() trong PHP

Hàm mysqli_get_client_stats() trong PHP

Cách sử dụng mysqli_get_client_stats() trong PHP

Hàm array_unique() trong PHP

Hàm array_unique() trong PHP

Cách sử dụng array_unique() trong PHP

Hàm mysqli_get_client_version() trong PHP

Hàm mysqli_get_client_version() trong PHP

Cách sử dụng mysqli_get_client_version() trong PHP

Hàm array_uintesect() trong PHP

Hàm array_uintesect() trong PHP

Cách sử dụng array_uintesect() trong PHP

Hàm mysqli_get_connection_stats() trong PHP

Hàm mysqli_get_connection_stats() trong PHP

Cách sử dụng mysqli_get_connection_stats() trong PHP

Hàm array_sum() trong PHP

Hàm array_sum() trong PHP

Cách sử dụng array_sum() trong PHP

Hàm mysqli_get_host_info() trong PHP

Hàm mysqli_get_host_info() trong PHP

Cách sử dụng mysqli_get_host_info() trong PHP

Top