Điểm:0

Tôi nên vô hiệu hóa bộ đệm nào trong plugin khối xây dựng mảng kết xuất cho một hoặc nhiều chế độ xem?

lá cờ in

Vấn đề thực sự là plugin đôi khi sẽ trả về các mảng kết xuất là các khối riêng biệt hiển thị từ cùng một chế độ xem, cũng có thể với các đối số khác nhau. Điều tôi khám phá ra là trong những trường hợp này, mảng kết xuất đầu tiên được lưu vào bộ đệm để các màn hình tiếp theo giống với màn hình ban đầu. Tôi đang xây dựng các mảng kết xuất với buildRenderable($display_id, $args, FALSE), điều này rõ ràng sẽ vô hiệu hóa bộ nhớ đệm thẻ và khóa. Tuy nhiên, tôi không rõ cách cung cấp bối cảnh bộ đệm tùy chỉnh theo cách thủ công mà không có yêu cầu thay đổi.

4uk4 avatar
lá cờ cn
Điều này có liên quan https://drupal.stackexchange.com/questions/307728/render-view-inside-block-with-caching. Chiến lược tốt nhất cho bối cảnh bộ đệm tùy chỉnh của bạn tùy thuộc vào số lượng biến thể mà bối cảnh này đang tạo ra.
steve avatar
lá cờ in
Tôi đã thấy vấn đề bạn đề cập, bạn có thể giải thích ý của bạn trong nhận xét @ 4uk4 không?
Điểm:1
lá cờ cn

Tuy nhiên, tôi không rõ cách cung cấp bối cảnh bộ đệm tùy chỉnh theo cách thủ công mà không có một yêu cầu khác nhau.

Có ba chiến lược:

  1. Thêm ngữ cảnh bộ đệm tùy chỉnh vào mảng kết xuất, sau đó ngữ cảnh bộ đệm nổi lên khối và trang thêm các biến thể trên mỗi cấp ngược dòng.

  2. Thêm một lazy-builder và đặt thuộc tính #tạo_placeholder. Sau đó, bối cảnh bộ đệm tùy chỉnh không nổi lên nữa.Thay vào đó, khối và trang được lưu trong bộ nhớ cache bao gồm trình giữ chỗ được thay thế bằng nội dung được tạo chậm sau này khi trang được lưu trong bộ nhớ cache được phân phối.

  3. Thêm tuổi tối đa của bộ đệm là 0. Các khối đã được tạo sẵn trong trình tạo lười biếng và được giữ chỗ nếu nội dung đáp ứng yêu cầu điều kiện giữ chỗ tự động. Điều này dẫn đến một khối không bao giờ được lưu vào bộ đệm và luôn được giữ chỗ.

Sử dụng tùy chọn đầu tiên cho bối cảnh bộ đệm không có quá nhiều biến thể. Tùy chọn thứ hai cần nhiều nỗ lực hơn để triển khai, vì Drupal 8.8, bạn cần thêm một lớp triển khai TrustedCallbackInterface hoặc RenderCallbackInterface, nhưng linh hoạt hơn để xác định nội dung tĩnh và động, ngay cả trong cùng một khối. Dễ dàng hơn là tùy chọn thứ ba, hãy sử dụng tùy chọn này nếu nội dung khối dễ bay hơi đến mức không đáng để lưu vào bộ nhớ đệm.

steve avatar
lá cờ in
Biến `nội dung` trong mẫu chứa hai mảng kết xuất riêng biệt có hợp lý không?
4uk4 avatar
lá cờ cn
Có, bạn thường sử dụng các thùng chứa để phân tách chúng trong một cấu trúc có thể hiển thị cũng có thể sử dụng được. Xem https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Render%21Element%21Container.php/class/Container
steve avatar
lá cờ in
Tôi đoán điều tôi đang hỏi là, biến `content` trong mẫu chứa các mảng hiển thị _true_, sử dụng id hiển thị dạng xem rời rạc. Tuy nhiên, cuối cùng chúng không được hiển thị là khác biệt, đó là vấn đề tôi đang gặp phải. Tôi chỉ đang hiển thị `nội dung` với `{% for value in content %} {{ value }} {% endfor %}`.
4uk4 avatar
lá cờ cn
Thông thường, tên biến `nội dung` trong mẫu Drupal là một mảng kết xuất được kết xuất đệ quy giống như bất kỳ mảng kết xuất nào khác mà không giả sử một cấu trúc cụ thể.Nếu bạn có quyền kiểm soát ở cả hai đầu của biến, bạn có thể đưa ra các giả định như vậy, nhưng tôi sẽ không làm điều này. Nếu ai đó không biết điều đó và xóa mẫu khối tùy chỉnh hoặc chuyển sang một chủ đề khác không chứa mẫu này, mọi thứ sẽ bị hỏng.
4uk4 avatar
lá cờ cn
Nếu bạn cần kết xuất các biến riêng biệt thì hãy thêm mẫu tùy chỉnh vào mô-đun của bạn cho bên trong và sử dụng mẫu khối để tạo chủ đề cho bên ngoài khối nếu cần.
steve avatar
lá cờ in
Tôi nghĩ rằng tôi có lẽ không được rõ ràng. Những gì chúng ta đang thảo luận là một mô-đun tùy chỉnh, với lớp plugin khối trả về một hoặc nhiều khối chế độ xem dưới dạng mảng kết xuất trong phương thức `build`. Các mảng kết xuất này được tạo theo chủ đề trong một mẫu khối tùy chỉnh trong mô-đun. Câu hỏi của tôi trong các nhận xét này về biến `nội dung` được chuyển đến mẫu là: Có hợp lý không, liên quan đến vấn đề tôi gặp phải với bộ nhớ đệm mảng kết xuất, để có các mảng kết xuất riêng biệt _chỉnh_ được chuyển đến mẫu, mà cuối cùng vẫn được hiển thị không chính xác như cũ?
4uk4 avatar
lá cờ cn
Chúng tôi đang thảo luận giống nhau, sự khác biệt là tôi đang đề xuất các mảng kết xuất này theo chủ đề trong một mẫu tùy chỉnh không phải là mẫu khối. Xem https://www.drupal.org/docs/theming-drupal/twig-in-drupal/create-custom-twig-templates-for-custom-module#s-step-33-render-as-part-of -another-plugin-chẳng hạn như-khối.
steve avatar
lá cờ in
Hãy để chúng tôi [tiếp tục cuộc thảo luận này trong cuộc trò chuyện](https://chat.stackexchange.com/rooms/135849/discussion-between-steve-and-4uk4).
Điểm:0
lá cờ in

Cuối cùng, tôi không thể lấy tất cả các đề xuất này để lấy mảng đầu tiên chứ không phải bộ đệm. Điều này vẫn có thể là do thiếu sót trong quy trình của tôi, nhưng cuối cùng tôi chỉ sử dụng hai chế độ xem riêng biệt, thay vì cố gắng làm cho các mảng thay đổi trên id hiển thị cho một chế độ xem.

Đă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.