Điểm:0

Làm cách nào để lưu vào bộ đệm Xem khối theo ngôn ngữ nội dung?

lá cờ us

Tôi có chế độ xem (khối) rất đơn giản để liệt kê tiêu đề của nút. Chế độ xem này có id từ bộ lọc theo ngữ cảnh url và một bộ lọc duy nhất để lọc trên Ngôn ngữ nội dung được đặt cho trang (theo tiền tố URL). Sau đó, khối này được đặt bằng cách sử dụng Trình tạo bố cục ở chế độ xem Toàn bộ nội dung cho loại nút này.Chế độ xem được đặt để sử dụng bộ nhớ đệm dựa trên Thẻ. Khi tôi chuyển trang qua lại giữa các ngôn ngữ; ngôn ngữ tiêu đề không thay đổi.

Vô hiệu hóa chế độ xem vào bộ nhớ đệm sẽ khắc phục điều này.

Tìm hiểu một chút và tôi thấy rằng ngữ cảnh bộ nhớ cache của Chế độ xem dựa trên ngôn ngữ Giao diện nhưng Tiêu đề là nội dung; vì vậy nó cần phải dựa trên Ngôn ngữ nội dung. Tôi đã thấy một vài bài đăng về cài đặt bối cảnh bộ đệm và thẻ bộ đệm nhưng chúng dường như không hoạt động.

Cho đến nay tôi đã thử điều này:

function mycustom_views_pre_view(ViewExecutable $view, $display_id, array &$args) {
  $language_manager = \Drupal::languageManager();
  $langcode = $language_manager->getCurrentLanguage(LanguageInterface::TYPE_CONTENT)->getId();
  if (isset($view->element['#cache']['contexts']) && is_array($view->element['#cache']['contexts'])) {
    foreach ($view->element['#cache']['contexts'] as $key => $context) {
      if (stristr($context, 'language_interface')) {
        unset($view->element['#cache']['contexts'][$key]);
      }
    }
    $view->element['#cache']['contexts'][] = 'languages:language_content';
    $view->element['#cache']['tags'][] = 'ngôn ngữ:' . mã ngôn ngữ $;
  }
}

Không ai trong số này dường như để giúp đỡ.

Có thể nào tôi đã sửa chế độ xem vào bộ nhớ đệm nhưng khối vẫn không được lưu vào bộ nhớ cache đúng cách?

Điểm:1
lá cờ cn

Đối với các trường hiển thị Chế độ xem, bạn có thể thêm siêu dữ liệu bộ nhớ cache vào trường để có thể sử dụng siêu dữ liệu này cho các hàng đã lưu trong bộ nhớ cache và sau đó tạo bong bóng cho chế độ xem và khối được hiển thị.

/**
 * Triển khai hook_pre process_views_view_field().
 */
function mymodule_pre process_views_view_field(mảng &$variables) {
  // nhắm mục tiêu chế độ xem và trường cụ thể
  $variables['#cache']['contexts'][] = languages:language_content';
}
Điểm:0
lá cờ de

Bạn có thể thêm một lớp phụ trợ cho khối, sau đó thêm ngữ cảnh bộ đệm trên ngôn ngữ vào khối đó.

Trước tiên, bạn cần lấy khóa cấu hình cho khối xem. Tôi tin rằng đó là lượt xem.view.[BLOCK_ID]. Bạn có thể lấy ID khối trong phần nâng cao của chế độ xem.

Tiếp theo, bạn thêm một lớp tùy chỉnh vào khối. Đây là cách nó được thực hiện cho khối xây dựng thương hiệu hệ thống.

/**
 * Triển khai hook_block_alter().
 *
 * Thay đổi lớp cho khối thương hiệu hệ thống để thêm bộ đệm
 * bối cảnh cho ngôn ngữ.
 */
function [MODULE]_block_alter(mảng &$definitions) {
  // Đặt gọi lại tùy chỉnh cho khối menu hệ thống
  $definitions['system_branding_block']['class'] = 'Drupal\[MODULE]\Plugin\Block\SystemBrandingBlockOverride';
}

Sau đó, bạn có thể thêm ngữ cảnh bộ đệm trên ngôn ngữ vào lớp:

không gian tên Drupal\[MODULE]\Plugin\Block;

sử dụng Drupal\system\Plugin\Block\SystemBrandingBlock;

/**
 * Thêm bộ nhớ đệm nhóm vào khối thương hiệu hệ thống.
 */
lớp SystemBrandingBlockOverride mở rộng SystemBrandingBlock {

  /**
   * {@inheritdoc}
   */
  hàm công khai getCacheContexts() {
    $contexts = parent::getCacheContexts();

    $contexts[] = 'ngôn ngữ';

    trả về bối cảnh $;
  }

}

Lưu ý rằng bạn có thể muốn sử dụng một trong các bối cảnh bộ đệm sau thay thế:

  • ngôn ngữ: language_interface
  • ngôn ngữ: language_content
liquidcms avatar
lá cờ us
Sẽ không ngạc nhiên nếu điều này cũng hoạt động; nhưng câu trả lời của 4k4 là 1 dòng - vì vậy hãy chọn dòng đó.
Jaypan avatar
lá cờ de
Nếu tác phẩm của anh ấy, thì càng tốt!
4uk4 avatar
lá cờ cn
Khối xây dựng thương hiệu hệ thống là khối cốt lõi duy nhất mà tôi biết không hiển thị nội dung khối. Bạn không cần giải pháp thay thế này cho các khối khác. Ngược lại, nó thường không hoạt động đối với nội dung được hiển thị. Nói chung, đó là cách tiếp cận tốt nhất để thêm siêu dữ liệu bộ đệm vào phần nội dung chi tiết nhất mà nó thuộc về và để nó nổi lên.

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