Hỏi về cách code comment
- Em chào mọi người.. Đây là lần đầu tiên e hỏi vì thế nếu có gì sai xót mong mọi người bỏ quá cho ạ.
- Ý là e đang code 1 trang web cá nhân cho bản thân để đăng những bài viết được xem là kinh nghiệm. Nhưng e đang gặp khó khăn ở phần "comment". E chưa biết hình thành ý tưởng để code comment cho trang web như thế nào cả ạ.
- Ví dụ như là: 1 bài viết có nhiều comment, nhưng 1 comment thì của 1 bài viết, và một comment có thể là riêng lẻ, hoặc là quote của một comment khác.
- Mong mọi người có thể giúp đỡ ạ. Cuối lơi, e xin chân thành cám ơn ạ.
1 CÂU TRẢ LỜI
Anh có vài gợi ý cho em như sau:
- Em có một bảng
posts
với khoá chính làid
- Bảng
comments
sẽ có khoá ngoại làpost_id
, trường này để xác định xem comment đó thuộc vàopost
nào. Như vậyposts
vàcomments
sẽ có quan hệ1-n
. - Bảng
comments
có trườngparent_id
, khoá này trỏ đến chínhid
của bảngcomments
, để xác định xem một comment sẽ có cha là comment nào (tức một comment là trả lời của một comment nào). Như vậy 1 comment có thể có nhiều comment con, và có không quá 1 comment cha.
Khi hiển thị comment trong một post thì em cứ select hết comments ra, rồi xử lý để sắp xết comment tầng tầng lớp lớp thôi, mặc dù hơi vất vả một chút
Đấy là trong trường hợp chỉ có post là có comment. Còn như Viblo thì có comment
cho post
, cho question
, cho series
nữa nên mọi thứ sẽ phức tạp hơn một chút Khi đó thay vì có post_id
trong bảng comments
, ta sẽ có commentable_type
để lưu xem comment là cho đối tượng gì: Post, Question hay Series, và sau đó là commentable_id
để lưu id
của đối tượng được comment. Kiểu implement đó gọi là Polymorphic Relation, nhưng chắc trong trường hợp của em ở trên thì chưa cần đến mức như vậy đâu.
@thangtd90 Dạ, e hiểu cái đó ạ, e cũng nghĩ đến cái đó rồi... Nhưng mình process một núi như thế liệu có làm server bị chậm không a? E chỉ thắc mắc thôi ạ.
@minhtuancnttk39 Cũng không phải là quá nhiều đâu, nhưng đúng là nếu viết SQL không cẩn thận sẽ phải sử dụng nhiều câu queries mới lấy hết dữ liệu được.
Em có thể làm theo cách lấy comment theo post ra rồi xử lý ở tầng PHP hay Ruby, Java của mình, thay vì dùng các câu lệnh join tầng tầng lớp lớp. Sau đó thì cũng chỉ là chạy một vài vòng for để sắp xếp lại comments thôi mà.
Ngoài ra em cũng có thể tính đến việc hạn chế lại số tầng comment, như chỉ cho phép reply 2 tầng (reply lại reply của một comment), sau đó thì không cho reply nữa chẳng hạn
@thangtd90 Dạ, e biết ạ, e chỉ cho 2 tầng thôi ạ.. còn lại mình sẽ quote theo username của người mình luận cần quotes..
- Anh cho em hỏi nốt luôn ạ. Làm thế nào để có thể tags nhiều tags cho một bài viết ạ. Mong a giúp được ạ, tại e đang hoàn thành các bước chuẩn bị cho một website.
- E cám ơn a.
@minhtuancnttk39 Để làm chức năng tags
với việc có thể gắn nhiều tags
cho một bài viết thì em cần thiết lập quan hệ n-n
giữa bảng tags
và bảng posts
. Tức 1 tag có thể có nhiều posts và 1 post có thể có nhiều tag.
Em chỉ cần thêm một bảng trung gian là post_tag
, lưu post_id
và tag_id
là được.
Khi người dùng nhập nhiều tag cho một bài viết, em sẽ kiểm tra xem tag đó đã tồn tại hay chưa, nếu chưa thì tạo mới ra, và insert bản ghi mới vào bảng trung gian post_tag
là được.
Đó là về kiến trúc server, còn về thực hiện ở client (trình duyệt) thì em có thể package như type ahead tag input
@thangtd90 Dạ anh, từ tối qua đến giờ e code nguyên cái này... thấy thật là tỏa.. hehe
- E cám ơn a nhiều.. Tiện thể, a có thể cho e xin info facebook khi nào có gì e hỏi ý kiến góp ý thôi được kg ạ.
@minhtuancnttk39 Facebook cá nhân thì anh có public ở trang profile Viblo tại @thangtd90 rồi đấy em
Nhưng mà có câu hỏi gì thì cứ ưu tiên đặt trên Viblo em ạ, không chỉ anh mà sẽ còn có nhiều người khác có thể giúp em mà
@thangtd90 Dạ, E biết rồi ạ... Đúng là học những cái không hiểu hỏi sẽ nhanh tiến bộ hơn..
@minhtuancnttk39 Hỏi xong rồi trực tiếp code, trực tiếp vận dụng những cái mình đã học vào thực tế, thì sẽ còn tiến bộ nhanh hơn nữa
Bạn vào thử web này xem trong phần sản phẩm họ code rất đẹp https://inoxduyanh.com/ban-ghe-inox/
@thangtd90 mình dân không chuyên nên toàn đi copy code người khác về sài thôi
Good question
@KmasterYC E chưa biết phải biểu diễn như thế nào cả ấy ạ.
Bạn thử tham khảo reddit.com xem sao
@thanhhau E muốn làm 1 hệ thống comment như viblo mình đây ấy ạ, tự làm tất cả... tuy khổ một xí, nhưng em nghĩ sẽ học được rất nhiều thứ ạ...