Date of posting:  2023-01-10 10:28:27

        Ư 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. Bài này chúng ta cùng nhau viết code trang hiển thị nội dung cho một bài viết chỉ định nhé. 

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>

<?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ứ liên hệ với mình để đượ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!


Code games & Web Creating a basic news website using PHP

Articles in the same category

Entertainment game corner(play live on the web) Login (play for reward)Instructions for playing and receiving rewward



caro


Butterfly


FlipFlop

online chess

Tetris

Jigsaw

15_PUZZLE

Kill ghosts

Gamebird

Planet Defense

Tower game

Shoot the ball

Plapy Bird (NH.Đông)

Diablo

Gamedraw

Game Phases

fun and games

Fish shooting

Street Fight (Play on phone , tablet)

Street Fight (Play on compute and laptop)

Same pair of pictures



0379136392

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. 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

 +   KTT-0362497726:Ok! Mình rất thích trang web của bạn.

Trả lời

 +   HoangQuan-0985073641:Cần tạo nhiều game hay nữa em!

Trả lời

 *   Lê Thuyên-0379136391:HoangQuan0985073641--->Ok! Em cảm ơn anh ạ!

Trả lời

 +   L.Ngư-0906744578:Nghiên cứu tích hợp sàn giao dịch tiền ảo đi cu.

Trả lời

 *   Lê Thuyên-0379136392:L.Ngư0906744578--->Đang nghiên cứu Grandma.

Trả lời


Contact: Lê Văn Thuyên - phone: 0379136392 ; Gmail: lethuyen0379136392@gmail.com

Categories:


1086259