Yêu cầu thg 3 28, 2018 11:32 CH 2177 2 1
  • 2177 2 1
+2

Hỏi về cách code comment

Chia sẻ
  • 2177 2 1
  • 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 ạ.
thg 3 29, 2018 3:02 SA

Good question 😄

Avatar Jimmy Nguyen @minhtuancnttk39
thg 3 29, 2018 3:04 SA

@KmasterYC E chưa biết phải biểu diễn như thế nào cả ấy ạ.

thg 3 29, 2018 3:15 SA

Bạn thử tham khảo reddit.com xem sao 😄 z944083963119_4f2b48f4d36b5d9a5e01beac8e598408.jpg

Avatar Jimmy Nguyen @minhtuancnttk39
thg 3 29, 2018 3:16 SA

@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ứ ạ...

1 CÂU TRẢ LỜI


Đã trả lời thg 3 29, 2018 3:36 SA
Đã được chấp nhận
+3

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ào post nào. Như vậy postscomments sẽ có quan hệ 1-n.
  • Bảng comments có trường parent_id, khoá này trỏ đến chính id của bảng comments, để 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.

Chia sẻ
Avatar Jimmy Nguyen @minhtuancnttk39
thg 3 29, 2018 3:44 SA

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

Avatar Tran Duc Thang @thangtd90
thg 3 29, 2018 4:17 SA

@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 😄

Avatar Jimmy Nguyen @minhtuancnttk39
thg 3 29, 2018 5:21 CH

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

29542921_590368427981582_7996612913888490336_n.jpg

Avatar Tran Duc Thang @thangtd90
thg 3 30, 2018 1:27 SA

@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_idtag_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

Avatar Jimmy Nguyen @minhtuancnttk39
thg 3 30, 2018 1:34 SA

@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 ạ.
Avatar Tran Duc Thang @thangtd90
thg 3 30, 2018 2:13 SA

@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à 😃

Avatar Jimmy Nguyen @minhtuancnttk39
thg 3 30, 2018 2:25 SA

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

Avatar Tran Duc Thang @thangtd90
thg 3 30, 2018 3:02 SA

@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 😉

Avatar Phạm Đắc Duy @fifaonlinehp1
thg 10 22, 2019 1:33 CH

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/

Avatar Phạm Đắc Duy @fifaonlinehp1
thg 10 22, 2019 1:35 CH

@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 😄

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí