Hướng dẫn tạo website tin tức phần 25: Show bài viết

Hướng dẫn tạo website tin tức phần 25: Show bài viết là vấn đề được nhiều lập trình viên quan tâm, bởi những kiến thức trên trường lớp là không đủ, vì vậy bài Hướng dẫn tạo website tin tức phần 25: Show bài viết sẽ chia sẻ tới bạn nhiều thông tin hữu ích

Mọi người vẫn hỏi tôi về việc học lập trình nói chung và PHP nói riêng có cần năng khiếu hay quá khó để tiếp cận hay không. Thì tôi có thể trả lời rằng, học lập trình cũng như việc bạn học tiếng Anh hay bất kỳ một ngôn ngữ khác, bởi lập trình...là ngôn ngữ của máy tính, để máy tính đọc và máy tính thực hiện theo yêu cầu của mình, bạn thích là học được.

Hello 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 hướng dẫn xây dựng trang tin tức PHP tại Hoidapcode. Trong bài học trước chúng ta đã cùng nhau xây dựng trang hiển thị danh sách bài viết cho từng chuyên mục. Và hôm nay, mình sẽ hướng dẫn các bạn viết trang hiển thị nội dung cho một bài viết chỉ định. Nào chúng ta bắt đầu thôi!

1. Hiển thị nội dung bài viết

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

<?php
 
// Get tham số post
$sp = trim(htmlspecialchars(addslashes($_GET['sp'])));
$id = trim(htmlspecialchars(addslashes($_GET['id'])));
 
// Lấy thông tin bài viết
$sql_get_data_post = "SELECT * FROM posts WHERE id_post = '$id'";
if ($db->num_rows($sql_get_data_post)) {
    $data_post = $db->fetch_assoc($sql_get_data_post, 1);
} else {
    // Nếu không tồn tại 
    require 'templates/404.php';
    exit;
}
 
?>
<div class="container">
    <div class="row">
        <h1><?php echo $data_post['title']; ?></h1>
        <div class="body-post">
            <?php echo htmlspecialchars_decode($data_post['body']); ?>
        </div>
        <div class="cate-post">
            <?php 
 
            // In chuyên mục của bài viết
            for ($i = 1; $i <= 3; $i++) {
                $id_cate = $data_post['cate_' . $i . '_id'];
                if ($id_cate) {
                    $sql_get_data_cate = "SELECT label, url FROM categories WHERE id_cate = '$id_cate' AND type = '$i'";
                    if ($db->num_rows($sql_get_data_cate)) {
                        $data_cate = $db->fetch_assoc($sql_get_data_cate, 1);
 
                        echo '<a class="btn btn-primary btn-sm" href="' . $_DOMAIN . 'category/' . $data_cate['url'] . '">' . $data_cate['label'] . '</a> ';
                    }
                }
            }
 
            ?>
        </div>
    </div>
    <hr>
    <div class="row">
        <h3>Bài viết liên quan</h3>
        <?php
 
        // Hiển thị các bài viết liên quan theo chuyên mục của bài viết chỉ định
        $sql_get_invole_post = "SELECT DISTINCT * FROM posts WHERE (cate_1_id = '$data_post[cate_1_id]' OR cate_2_id = '$data_post[cate_2_id]' OR cate_3_id = '$data_post[cate_3_id]') AND status = '1' AND id_post != '$id'";
        // Nếu tồn tại các bài viết liên quan
        if ($db->num_rows($sql_get_invole_post)) {
            // In danh sách bài viết liên quan
            foreach ($db->fetch_assoc($sql_get_invole_post, 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>
                ';
            }
        // Không tồn tại thì thông báo
        } else {
            echo '<div class="well well-lg">Không có bài viết liên quan nào.</div>';
        }
 
        ?>
    </div>
</div>


  • Trong code này mình đã chú thích một số phần, nên mình chỉ giải thích thêm một chút nữa:Về phần in chuyên mục của bài viết, vì trong table posts của chúng ta có 3 fields chuyên mục nên vòng lặp for sẽ chạy $i từ 1 đến 3.
  • Về phần bài viết liên quan, mình sẽ lấy các bài viết có chung chuyên mục hoặc lớn hoặc vừa hoặc nhỏ với bài viết chỉ định. Các bạn lưu ý phải có lệnh DISTINCT để không select các row giống nhau và điều kiện id_post = '$id' để không select bài viết chỉ định.

Ok, bây giờ các bạn save rồi chạy lại, chúng ta sẽ có kết quả như hình bên dưới:

2. Lời kết

Bài này có vẻ hơi ngắn một chút nhưng mình hi vọng các bạn đã nắm rõ cách show một bài viết chỉ định theo url, và đã biết cách show các bài viết liên quan đơn giàn theo chuyên mục. Qua bài sau, chúng ta sẽ cùng nhau xây dựng chức năng tìm kiếm cho project 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!

Hy vọng với bài viết về Hướng dẫn tạo website tin tức phần 25: Show bài viết đã giải đáp giúp bạn phần nào về kiến thức lập trình PHP. Như tôi đã nói, ngôn ngữ lập trình không quan trọng bằng tư duy giải thuật, tư duy logic để giải quyết vấn đề.

Với những năm trước đây, lập trình viên là một cái nghề khó và kén chọn người học, đồng nghĩa với việc thu nhập hàng tháng của các lập trình viên luôn cao. Còn những năm gần đây, thì lập trình là môn học phổ thông, và ai cũng nên học một ngôn ngữ lập trình nào đó.

Nếu bạn còn bất kỳ câu hỏi nào trong việc học lập trình online, hãy gửi yêu cầu cho tôi qua email hoidapcode.com@gmail.com hoặc để lại comment bên dưới, tôi sẽ giải đáp trong vòng 24 giờ!

Blog hoidapcode.com là blog được tổng hợp tự động các bài học, thông tin về lập trình trên mạng internet. Nếu bạn có ý kiến hoặc đóng góp về bài viết này, hãy liên hệ với tôi!