Bỏ qua, đến nội dung

Câu hỏi thường gặp — Comments

Sử dụng chung

Bình luận có gửi thông báo không?

Hiện tại plugin comments chưa tích hợp trực tiếp với hệ thống thông báo. Tuy nhiên, bạn có thể kết hợp với plugin notifications hoặc workflow để gửi thông báo khi có bình luận mới trên bản ghi.

Có thể bình luận trên nhiều collection không?

Có. Bạn cần:

  1. Tạo Comment Collection cho mỗi loại bình luận (hoặc dùng chung một collection)
  2. Tạo quan hệ hasMany hoặc belongsToMany từ collection chính đến Comment Collection
  3. Thêm Comment block trong trang chi tiết tương ứng

Bình luận có hỗ trợ reply lồng nhau (threaded) không?

Hiện tại plugin hỗ trợ trích dẫn trả lời (quote reply) — khi trả lời, nội dung bình luận gốc được trích dẫn trong bình luận mới. Tuy nhiên, cấu trúc cha-con (threaded comments) chưa được kích hoạt (đã có trong source nhưng bị comment out). Trong tương lai, tính năng này có thể được mở.

Có giới hạn ký tự bình luận không?

Trường content sử dụng kiểu text (long), cho phép lưu trữ nội dung dài không giới hạn ký tự ở tầng database. Tuy nhiên, nếu cần giới hạn, bạn có thể thêm validation ở tầng UI.

Nội dung bình luận hỗ trợ Markdown?

Có. Trường content sử dụng interface vditor với component MarkdownVditor, hỗ trợ đầy đủ:

  • Heading, bold, italic, strikethrough
  • Code block (với syntax highlighting)
  • Link và hình ảnh
  • Bảng (table)
  • Danh sách có thứ tự và không thứ tự
  • Quote block

Cấu hình

Comment Collection khác gì collection thường?

Comment Collection là một collection template đặc biệt (template: 'comment') với các đặc điểm:

Đặc điểmGiá trị
Templatecomment
MàuCam (orange)
Trường mặc địnhcontent (text, Vditor) — không thể xóa
Preset fieldsTự động thêm, không thể tắt (presetFieldsDisabled = true)
Thứ tựOrder = 2

Làm sao hiển thị Comment block trong popup bản ghi?

Comment block chỉ xuất hiện trong popup nếu collection hiện tại có ít nhất một trường association (hasMany hoặc belongsToMany) trỏ đến một Comment Collection. Nếu không thấy option Comment khi Add block, hãy kiểm tra:

  1. Comment Collection đã được tạo
  2. Quan hệ association đã được thiết lập
  3. Plugin comments đã được kích hoạt

Có thể tùy chỉnh giao diện bình luận không?

Có, thông qua:

  • Comment Block Settings: Cấu hình block (bật qua commentBlockSettings trong schema settings)
  • Comment Item Action Initializers: Tùy chỉnh action hiển thị trên mỗi bình luận (sửa, xóa, trích dẫn trả lời)
  • Schema Initializer: Thêm Comment Block vào page hoặc popup

Phân quyền

Ai có thể xóa bình luận?

  • Người tạo: Chỉ xóa bình luận của chính mình
  • Admin: Xóa bất kỳ bình luận nào
  • Quyền xóa được kiểm soát qua ACL trên Comment Collection

Người dùng không có quyền xem bản ghi có thấy bình luận không?

Không. Bình luận hiển thị trong context của bản ghi — nếu người dùng không có quyền xem bản ghi, họ cũng không truy cập được trang chi tiết và Comment block.

Lỗi thường gặp

Không thấy block Comments trong danh sách

Nguyên nhân có thể:

  1. Plugin chưa được kích hoạt
  2. Comment block trong popup yêu cầu collection hiện tại phải có quan hệ hasMany/belongsToMany đến Comment Collection

Cách xử lý:

  1. Kiểm tra Plugin Manager — đảm bảo plugin-comments đã bật
  2. Tạo Comment Collection nếu chưa có
  3. Thiết lập quan hệ association từ collection chính đến Comment Collection

Bình luận bị mất sau khi xóa bản ghi

Nguyên nhân: Nếu quan hệ giữa bản ghi và Comment Collection được cấu hình onDelete: CASCADE, xóa bản ghi sẽ xóa toàn bộ bình luận liên quan.

Cách xử lý: Nếu muốn giữ bình luận khi xóa bản ghi, thay đổi onDelete sang SET NULL hoặc NO ACTION trong cấu hình quan hệ.

Nội dung bình luận hiển thị dạng text thuần

Nguyên nhân: Component hiển thị không phải MarkdownVditor.

Cách xử lý: Kiểm tra cấu hình trường content trong Comment Collection — đảm bảo interface là vditor và component là MarkdownVditor.

Không thể sửa bình luận của người khác

Đây là hành vi đúng. Plugin chỉ cho phép sửa bình luận do chính mình tạo. Admin có thể xóa nhưng không nhất thiết được phép sửa bình luận của người khác (tùy cấu hình ACL).