Điểm:1

View only your own comments, no one else's?

lá cờ cn

I have a client who would like users to be able to comment on content without being able to see any other users' comments. This is for a review system where users shouldn't feel influenced by the views of other users. I'm using Drupal 9.3.14 and a subtheme of Radix.

I have tried adding this to my theme's comment.html.twig:

{% if author_id == user.id %}
    {{ content }}
{% endif %}

That works for a while, but after a while, users report that they can see some other users' comments, but not all of them.

How can I make sure that users can always see only their own comments and no one else's?

leymannx avatar
lá cờ ne
Bởi vì bạn đã không triển khai bất kỳ bộ nhớ đệm dựa trên người dùng nào trên phần nội dung đó.
sjhuskey avatar
lá cờ cn
Cảm ơn, @leymannx. Tôi đã xem xét việc triển khai bộ nhớ đệm dựa trên người dùng, nhưng tôi không thể tìm thấy bất kỳ lời khuyên hoặc ví dụ thực tế nào để thực hiện điều đó. Bất kỳ con trỏ? Có cách nào tôi có thể triển khai để xử lý bộ nhớ đệm trên nhận xét không?
Điểm:1
lá cờ ne

Phát hiện hook_ENTITY_TYPE_access/hook_comment_access không hoạt động khi cố gắng quay lại AccessResult::forbidden()->cachePerUser() sau khi so sánh ID chủ sở hữu nhận xét và ID người dùng hiện tại (có thể liên quan: #2879087), bạn có thể vui lòng thử logic tiền xử lý sau không? Vì hiện tại tôi không có dự án nào để tự kiểm tra chính xác điều này nên tôi không chắc liệu nó có hoạt động theo cách đó hay không và nếu #văn bản thô hoàn toàn có thể bị (sai) sử dụng như một công tắc chặn truy xuất bộ đệm trong một mẫu.

/**
 * Triển khai hook_pre process_HOOK().
 */
hàm MYMODULE_pre process_comment(&$variables) {
  $variables['own_comment'] = [
    '#plain_text' => 'không',
    '#cache' => [
      'bối cảnh' => ['người dùng'],
    ],
  ];
  /** @var \Drupal\comment\Entity\Comment $comment */
  $comment = $variables['elements']['#comment'];
  if ($comment->getOwner()->id() === \Drupal::currentUser()->id()) {
    $variables['own_comment']['#plain_text'] = 'có';
  }
}
{% if own_comment['#plain_text'] == 'yes' %}
  {{ Nội dung }}
{% khác %}
  {{ 'Không phải bình luận của bạn'|t }}
{% endif %}

Có lẽ tôi thực sự đang làm giống như bạn đã làm và cuối cùng, cách duy nhất là triển khai trình định dạng trường nhận xét của riêng bạn, tương tự như định dạng trong Quản lý nhận xét về nội dung của riêng bạn mô-đun.

sjhuskey avatar
lá cờ cn
Ồ! Cảm ơn vì đã nỗ lực rất nhiều, @leymannx! Thật không may, có vẻ như biến "own_comment" chưa được đặt, vì vậy logic nhánh mà bạn đưa vào luôn chuyển thành "Không phải nhận xét của bạn". Tôi nghĩ bạn có thể đúng về việc cần triển khai trình định dạng trường nhận xét của riêng tôi. Tôi sẽ xem xét mô-đun bạn đã liên kết và xem tôi có thể làm gì.
4uk4 avatar
lá cờ cn
Siêu dữ liệu được đính kèm với phần tử kết xuất chỉ nổi lên nếu được kết xuất. Nếu bạn không có gì để kết xuất thì có một giải pháp thay thế. Móc tiền xử lý có một tính năng ẩn mà bạn có thể thêm siêu dữ liệu bộ đệm vào cấp cao nhất: `$variables['#cache']['contexts'][] = 'user';`. Lớp chủ đề nổi bong bóng này lên, độc lập với nội dung được hiển thị khác.
Điểm:0
lá cờ us

Xin lỗi, không có mã nào với điều này, chỉ là một ý tưởng để thử. Tập trung vào việc viết quyền mới với mô-đun tùy chỉnh, không sửa đổi html được lưu trong bộ nhớ cache. Nếu bạn truy cập vào các quyền của Drupal, thì bộ đệm có thể không còn là vấn đề nữa. Thêm vào đó, điều này giống như một vấn đề về quyền hơn là vấn đề về html.

Nếu bạn cài đặt drupal/console, bạn có thể chạy một dòng lệnh như drupal tạo: mô-đun để loại bỏ mô-đun ban đầu sau đó drupal tạo: quyền để thêm quyền vào mô-đun đó. Cách nhanh chóng để khai thác một mô-đun tùy chỉnh và sau đó đặt logic php tương tự mà bạn đã có trong đầu, nhưng chỉ cần thêm nó vào drupal theo một cách khác.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.