Asked Mar 28th, 2018 11:32 PM 726 2 1
  • 726 2 1
+2

Hỏi về cách code comment

Share
  • 726 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 ạ.
Mar 29th, 2018 3:02 AM

Good question 😄

+1
| Reply
Share
Nguyễn Minh Tuấn @minhtuancnttk39
Mar 29th, 2018 3:04 AM

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

0
| Reply
Share
Mar 29th, 2018 3:15 AM

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

+1
| Reply
Share
Nguyễn Minh Tuấn @minhtuancnttk39
Mar 29th, 2018 3:16 AM

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

0
| Reply
Share

1 ANSWERS


Answered Mar 29th, 2018 3:36 AM
Accepted
+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.

Share
Nguyễn Minh Tuấn @minhtuancnttk39
Mar 29th, 2018 3:44 AM

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

0
| Reply
Share
Thang Tran Duc @thangtd90
Mar 29th, 2018 4:17 AM

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

0
| Reply
Share
Nguyễn Minh Tuấn @minhtuancnttk39
Mar 29th, 2018 5:21 PM

@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

0
| Reply
Share
Thang Tran Duc @thangtd90
Mar 30th, 2018 1:27 AM

@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

0
| Reply
Share
Nguyễn Minh Tuấn @minhtuancnttk39
Mar 30th, 2018 1:34 AM

@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 ạ.
0
| Reply
Share
Thang Tran Duc @thangtd90
Mar 30th, 2018 2:13 AM

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

0
| Reply
Share
Nguyễn Minh Tuấn @minhtuancnttk39
Mar 30th, 2018 2:25 AM

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

+1
| Reply
Share
Thang Tran Duc @thangtd90
Mar 30th, 2018 3:02 AM

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

0
| Reply
Share
Phạm Đắc Duy @fifaonlinehp1
Oct 22nd, 1:33 PM

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/

0
| Reply
Share
Phạm Đắc Duy @fifaonlinehp1
Oct 22nd, 1:35 PM

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

0
| Reply
Share