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 12: PHP trang tin tức - Các chức năng của bài viết admin

Xin chào 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 bằng PHP. Ở trong bài trước, chúng ta đã hoàn thành xong các chức năng của hình ảnh. Tiếp tục hôm nay mình sẽ hướng dẫn các bạn viết các chức năng của bài viết. Bây giờ chúng ta bắt đầu thôi!

1. Khái quát

Đây có lẽ là phần quan trọng nhất của ứng dụng này rồi nhỉ? Bài viết (tiếng anh là posts) sẽ bao gồm nội dung của một lĩnh vực nào đó (chuyên mục) và có thể kèm hình ảnh, mô tả, tiêu đề, ... 

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.

Các đặc điểm và chức năng trong phần này là:

  • Viết bài
  • Chỉnh sửa bài viết
    • Phân quyền theo ID của tác giả viết bài (ngoại trừ quản trị viên)
  • Xoá bài viết
  • Danh sách bài viết
    • Phân trang và tìm kiếm
    • Hiển thị những bài viết thuộc theo từng tài khoản (ngoại trừ quản trị vie

2. Tạo table bài viết

Các bạn tạo table posts bằng cách chạy lệnh SQL sau:

CREATE TABLE `posts` (
  `id_post` int(11) NOT NULL,
  `title` text COLLATE utf8_unicode_ci NOT NULL,
  `descr` text COLLATE utf8_unicode_ci NOT NULL,
  `url_thumb` text COLLATE utf8_unicode_ci NOT NULL,
  `slug` text COLLATE utf8_unicode_ci NOT NULL,
  `keywords` text COLLATE utf8_unicode_ci NOT NULL,
  `body` longtext COLLATE utf8_unicode_ci NOT NULL,
  `cate_1_id` int(11) NOT NULL,
  `cate_2_id` int(11) NOT NULL,
  `cate_3_id` int(11) NOT NULL,
  `author_id` int(11) NOT NULL,
  `status` int(11) NOT NULL,
  `view` int(11) NOT NULL,
  `date_posted` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
ALTER TABLE `posts`
  ADD PRIMARY KEY (`id`);
ALTER TABLE `posts`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

php trang tin tuc cac chuc nang cua bai viet admin table posts gif

Mình sẽ giải thích một số field:

  • title: tiều đề bài viết
  • descr: mô tả bài viết
  • url_thumb: url thumbnail (ảnh nhỏ) bài viết
  • slug: url bài viết
  • keywords: từ khoá bài viết
  • body: nội dung bài viết
  • cate_1_id, cate_2_id, cate_3_id: ID chuyên mục lớn/vừa/nhỏ của bài viết
  • author_id: ID tác giả của bài viết
  • status: trạng thái của bài viết
    • status = 0: xuất bản
    • status = 1: ẩn
  • view: lượt xem bài viết

3. Phân trang bài viết

Cũng như chức năng chuyên mục, ở phần này sẽ phân ra thành 3 trang:

  • Trang hiển thị danh sách bài viết (http://domain.com/admin/posts)
  • Trang thêm bài viết (http://domain.com/admin/posts/add)
  • Trang chỉnh sửa bài viết (http://domain.com/admin/posts/id)

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

<?php
 
// Nếu đăng nhập
if ($user)
{
    echo '<h3>Bài viết</h3>';
    // Lấy tham số ac
    if (isset($_GET['ac']))
    {
        $ac = trim(addslashes(htmlspecialchars($_GET['ac'])));
    }
    else
    {
        $ac = '';
    }
 
    // Lấy tham số id
    if (isset($_GET['id']))
    {
        $id = trim(addslashes(htmlspecialchars($_GET['id'])));
    }
    else
    {
        $id = '';
    }
 
    // Nếu có tham số ac
    if ($ac != '') 
    {
        // Trang thêm bài viết
        if ($ac == 'add')
        {
            // Dãy nút của thêm bài viết
            echo
            '
                <a href="' . $_DOMAIN . 'posts" class="btn btn-default">
                    <span class="glyphicon glyphicon-arrow-left"></span> Trở về
                </a> 
            ';
 
            // Content thêm bài viết
        } 
        // Trang chỉnh sửa bài viết
        else if ($ac == 'edit')
        {
            $sql_check_id_cate = "SELECT id_post, author_id FROM posts WHERE id_post = '$id'";
            // Nếu tồn tại tham số id trong table
            if ($db->num_rows($sql_check_id_cate)) 
            {
                $data_post = $db->fetch_assoc($sql_check_id_cate, 1);

                if ($data_post['author_id'] == $data_user['id_acc'] || $data_user['position'] == '1')
                {
                    // Dãy nút của chỉnh sửa bài viết
                    echo
                    '
                        <a href="' . $_DOMAIN . 'posts" class="btn btn-default">
                            <span class="glyphicon glyphicon-arrow-left"></span> Trở về
                        </a>
                        <a class="btn btn-danger" id="del_post" data-id="' . $id . '">
                            <span class="glyphicon glyphicon-trash"></span> Xoá
                        </a> 
                    ';  
     
                    // Content chỉnh sửa bài viết
                }
                else
                {
                    echo '<div class="alert alert-danger">ID bài viết không thuộc quyền sở hữu của bạn.</div>';
                }
            }
            else
            {
                // Hiển thị thông báo lỗi
                echo
                '
                    <div class="alert alert-danger">ID bài viết đã bị xoá hoặc không tồn tại.</div>
                ';
            }
        }
   }
    // Ngược lại không có tham số ac
    // Trang danh sách bài viết
    else
    {
        // Dãy nút của danh sách bài viết
        echo
        '
            <a href="' . $_DOMAIN . 'posts/add" class="btn btn-default">
                <span class="glyphicon glyphicon-plus"></span> Thêm
            </a> 
            <a href="' . $_DOMAIN . 'posts" class="btn btn-default">
                <span class="glyphicon glyphicon-repeat"></span> Reload
            </a> 
            <a class="btn btn-danger" id="del_post_list">
                <span class="glyphicon glyphicon-trash"></span> Xoá
            </a> 
        ';
 
        // Content danh sách bài viết
    }
}
// Ngược lại chưa đăng nhập
else
{
    new Redirect($_DOMAIN); // Trở về trang index
}
 
?>

4. Thêm bài viết

Truy cập đường dẫn http://domain.com/admin/posts/add để bắt đầu làm nhé!

Ở chức năng này chúng ta sẽ thêm tiêu đề, slug và một số thông tin cần thiết của bài viết thôi. Còn về nội dung, hình ảnh và mấy cái khác chúng ta sẽ thực hiên ở phần chỉnh sửa bài viết.

Xây dựng template

Các bạn mở file admin/templates/posts.php lên và chèn đoạn code này vào bên dưới dòng // Content thêm bài viết:

echo 
'
	<p class="form-add-post">
		<form method="POST" id="formAddPost" onsubmit="return false;">
			<div class="form-group">
				<label>Tiêu đề bài viết</label>
				<input type="text" class="form-control title" id="title_add_post">
			</div>
			<div class="form-group">
				<label>URL chuyên mục</label>
				<input type="text" class="form-control slug" placeholder="Nhấp vào để tự tạo" id="slug_add_post">
			</div>
			<div class="form-group">
				<button type="submit" class="btn btn-primary">Tạo</button>
			</div>
			<div class="alert alert-danger hidden"></div>
		</form>
	</p>	
';
Các bạn chạy lại trang sẽ được kết quả như sau:

php trang tin tuc cac chuc nang bai viet ket qua template them bai viet jpg

Viết Ajax gửi dữ liệu

Các bạn mở file admin/js/form.js lên và copy đoạn code bên dưới:

// Thêm bài viết
$('#formAddPost button').on('click', function() {
	$title_add_post = $('#title_add_post').val();
	$slug_add_post = $('#slug_add_post').val();

	if ($title_add_post == '' || $slug_add_post == '') {
		$('#formAddPost .alert').removeClass('hidden');
		$('#formAddPost .alert').html('Vui lòng điền đầy đủ thông tin.');
	} else {
		$.ajax({
			url : $_DOMAIN + 'posts.php',
			type : 'POST',
			data : {
				title_add_post : $title_add_post,
				slug_add_post : $slug_add_post,
				action : 'add_post'
			}, success : function(data) {
				$('#formAddPost .alert').html(data);
			}, error : function() {
				$('#formAddPost .alert').removeClass('hidden');
				$('#formAddPost .alert').html('Đã có lỗi xảy ra, hãy thử lại.');
			}
		});
	}
});

Viết PHP xử lý dữ liệu

Tạo file admin/posts.php và dán nội dung này vào:

<?php

// Kết nối database và thông tin chung
require_once 'core/init.php';

// Nếu đăng nhập
if ($user) 
{
	// Nếu tồn tại POST action
	if (isset($_POST['action']))
	{
		// Xử lý POST action
		$action = trim(addslashes(htmlspecialchars($_POST['action'])));

		// Thêm bài viết
		if ($action == 'add_post')
		{
			// Xử lý các giá trị
			$title_add_post = trim(addslashes(htmlspecialchars($_POST['title_add_post'])));
			$slug_add_post = trim(addslashes(htmlspecialchars($_POST['slug_add_post'])));

			// Các biến xử lý thông báo
			$show_alert = '<script>$("#formAddPost .alert").removeClass("hidden");</script>';
			$hide_alert = '<script>$("#formAddPost .alert").addClass("hidden");</script>';
			$success = '<script>$("#formAddPost .alert").attr("class", "alert alert-success");</script>';

			// Nếu các giá trị rỗng
			if ($title_add_post == '' || $slug_add_post == '')
			{
				echo $show_alert.'Vui lòng điền đầy đủ thông tin';
			}
			// Ngược lại
			else
			{
				// Kiểm tra bài viết tồn tại 
				$sql_check_post_exist = "SELECT title, slug FROM posts WHERE title = '$title_add_post' OR slug = '$slug_add_post'";
				// Nếu bài viết tồn tại
				if ($db->num_rows($sql_check_post_exist))
				{
					echo $show_alert.'Bài viết có tiêu đề hoặc slug đã tồn tại.';
				}
				else
				{
					// Thực thi thêm bài viết
					$sql_add_post = "INSERT INTO posts VALUES (
						'',
						'$title_add_post',
						'',
						'',
						'$slug_add_post',
						'',
						'',
						'',
						'',
						'',
						'$data_user[id_acc]',
						'0',
						'0',
						'$date_current'
					)";
					$db->query($sql_add_post);
					echo $show_alert.$success.'Thêm bài viết thành công.';
					$db->close(); // Giải phóng
					new Redirect($_DOMAIN.'posts'); // Trở về trang danh sách bài viết
				}
			}
		}

		// Tải chuyên mục trong chỉnh sửa bài viết
	}
	// Ngược lại không tồn tại POST action
	else
	{
		new Redirect($_DOMAIN);
	}
}
// Nếu không đăng nhập
else
{
	new Redirect($_DOMAIN);
}

?>
Ok! Bây giờ các bạn chạy lại và thêm bài viết thử xem nó có hoạt động không?

php trang tin tuc cac chuc nang bai viet ket qua them bai viet jpg

5. Lời kết

Mình sẽ kết thúc ở đây, trong phần sau chúng ta sẽ tiếp tục hoàn thành nốt các chức năng còn lại của bài viết. Nếu có thắc mắc gì các bạn cứ comment bên dưới hoặc đăng bài trên group kèm theo link bài viết đễ được hỗ trợ nhanh nhất. Cảm ơn các bạn, 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