Để tạo hệ thống tag cho bài viết trong trang web của bạn bạn cần chuẩn bị 3 table trong CSDL:
Table Topic chứa bài viết, tên tag Topic [id, tag]
Table Tag chứa tag toàn trang
web Tag [id, name]
Table Link dùng để liên kết 2 table trên tránh trường hợp data lớn query rất tốn thời gian. Bài viết thứ i có quan hệ với những tag nào.
Link [topic_id, tag_id]
Giải thuật cơ bản:
Khi người dùng tạo bài viết. Lấy id bài viết vừa tạo lưu vào biến $idTopic và cho lưu tag vào table Topic và lưu các tag đó vào 1 mảng.
Dùng foreach duyệt các phần tử trong mảng và đối chiếu với table
Tag. Nếu tồn tại thì lấy ID của nó ra và lưu vào biến $idTag nếu không tồn tại thì insert vào và lấy ID vừa thêm vào lưu vào biến $idTag.
Có được $idTopic và $idTag, bạn insert nó vào table Link
Code cụ thể:
# C.N.G @ V.N.O
# Lấy giá trị tag
$tags = $_POST['tag'];# Insert vào bài viếtmysql_query("INSERT INTO `topic` (tag) VAULES ('".$tags."')");# Lấy id của bài viết vừa mới thêm vào$idTopic = mysql_insert_id();# Cắt chuỗi tags đưa vào mảng$arrTag = explode(',', $tags);# Duyệt từng phần tử của Tagforeach ($arrTag as $tag) { $tag = trim($tag);# Lấy id của tag có tên là $tag, nếu ko có thì thêm mới$result = mysql_query("SELECT id FROM `tag` WHERE name = '".$tag."' LIMIT 0,1");
is_numeric($topic_id)) {# Xóa tag cũ để cập nhậtmysql_query("DELETE FROM `link` WHERE topic_id = '".$topic_id."'");# Update tag ở bài viếtmysql_query("UPDATE `topic` SET tag = '".$tags."' WHERE id = '".$topic_id."'");# Cắt chuổi tags đưa vào mảng$arrTag = explode(',', $tags);# Duyệt từng phần tử của Tagforeach ($arrTag as $tag) { $tag = trim($tag);# Lấy id của tag có tên là $tag, nếu ko có thì thêm mới$result = mysql_query("SELECT id FROM `tag` WHERE name = '".$tag."' LIMIT 0,1"); if (mysql_num_rows($result) > 0) { $idTag = mysql_result($result, 0, 0); } else { if(strlen($tag) > 3) { mysql_query("INSERT INTO `tag` (name) VALUES ('".$tag."')"); $idTag = mysql_insert_id(); } }mysql_query("INSERT INTO `link` (topic_id, tag_id) VALUES ('".$topic_id."', '".$idTag."')");
}
}
Chỉnh sửa cuối: 7 Tháng tám 2016
Để sử dụng các hiệu ứng ajax khi thêm, sửa xóa tag các bạn có thể tự viết các thư viện javascript theo ý mình hoặc sử dụng thư viện jQuery có sẵn: Taggle.js
Thư viện này cung cấp cho bạn các chức năng sau:
Nhấn Enter sẽ tự động hoàn thành tag 1 để nhập thêm các tag tiếp theo.
Tự động kiểm tra
các tags trùng nhau.
Đưa ra từ gợi ý khi gõ tag - chỉ sử dụng được với từ điển tiếng anh.
Chỉ cho phép nhập các tag được chỉ định sẵn.
Cho phép nhập mọi từ khóa trừ một số tag không cho phép.
Các bạn vào đây xem demo: Demo Taggle.js
Để sử dụng các bạn thêm thư viện jQuery và Taggle.js vào web của các bạn.
Download jQuery phiên bản mới nhất:
jQuery
Tạo input để nhập, xóa tag với tag1, tag2, tag3, tag4 query từ CSDL của bạn nếu bài viết đã có tag hoặc để trống nếu thêm mới.