Điểm:2

Đặt Body Class nếu Facet đang hoạt động

lá cờ in

Tôi cần đặt lớp cơ thể nếu bộ lọc khía cạnh đang hoạt động.

Nó nên được thực hiện trong yourtheme_pre process_html

nếu Facet đang hoạt động
sau đó
$variables['attributes']['class'][] = 'kích hoạt khía cạnh';

đối với cụm từ tìm kiếm toàn văn, nó hoạt động như vậy

  $variables['attributes']['class'][] = 'search-' . \Drupal::request()->query->get('search_api_fulltext');

Bất cứ ai cũng biết cách khai thác thông tin nếu một khía cạnh đang hoạt động hay không.

cảm ơn trước

Matthias

Điểm:2
lá cờ cn

Bạn không biết khi nào mẫu HTML được hiển thị cho dù một khía cạnh có hoạt động hay không. Vì vậy, trong mytheme_pre process_html() giả sử không phải vậy:

$variables['attributes']['class'][] = 'facet-is-not-active-class';

Trong khối khía cạnh, hãy thay thế lớp trình giữ chỗ nếu khối đó hiển thị:

function mytheme_pre process_block(&$variables) {
  if ($variables['configuration']['provider'] == 'facets') {
    if (!in_array('hidden', (array) $variables['attributes']['class'])) {
      $variables['#attached']['placeholders']['facet-is-not-active-class'] = [
        '#markup' => 'kích hoạt khía cạnh',
      ];
    }
  }
}

Quan trọng là chuỗi giữ chỗ facet-is-not-active-class là duy nhất, hãy sử dụng tên dài hơn hoặc thậm chí là hàm băm. Trình giữ chỗ được thay thế cho tất cả các lần xuất hiện của chuỗi trên trang.

Sự cố với trình giữ chỗ lồng nhau

Điều này chỉ hoạt động đối với các khối không được giữ chỗ tự động. Thật không may, khối khía cạnh luôn được giữ chỗ. Nó đặt tuổi tối đa của bộ đệm là 0, đáp ứng điều kiện mặc định cho giữ chỗ tự động. Nhìn thấy https://www.drupal.org/docs/drupal-apis/render-api/auto-placeholdering#s-what

Để ngăn chặn điều đó, bạn có thể đặt #create_placeholder thành FALSE:

/**
 * Triển khai hook_block_build_BASE_BLOCK_ID_alter().
 */
function mymodule_block_build_facet_block_alter(mảng &$build, \Drupal\Core\Block\BlockPluginInterface $block) {
  $build['#create_placeholder'] = FALSE;
}

Hãy cẩn thận: Đây là một kẻ giết người hiệu suất thực sự, nó tăng gấp đôi thời gian tải trang trong các thử nghiệm của tôi. Vì vậy, nếu hiệu suất là quan trọng, có lẽ bạn nên tìm giải pháp phía máy khách, CSS tốt hơn hoặc thư viện javascript có thêm các lớp cần thiết.

lá cờ ru
Tôi không biết về `$variables['#attached']['placeholders']` đặc biệt đó trước đây. Có một số loại tài liệu cho tất cả các khả năng bên trong mảng `#attached` không? Tôi biết các khóa `drupalSettings`, `libraries` và `html_head` trong đó, nhưng dường như còn nhiều hơn nữa.
lá cờ ru
Liên quan đến các khóa ma thuật trong `$variables['#attached']`: tôi đã tự tìm kiếm trên Google từ [blog này](https://davidjguru.github.io/blog/drupal-tips-the-magic-of-attached) đến [Tài liệu API](https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Render%21HtmlResponseAttachmentsProcessor.php/function/HtmlResponseAttachmentsProcessor%3A%3AprocessAttachments/9.3.x). Quan trọng: Đọc ngoài các tài liệu trong tiêu đề và xem [các khóa (không) được hỗ trợ trong mã](https://git.drupalcode.org/project/drupal/-/blob/9.4.x/core/lib/ Drupal/Core/Render/HtmlResponseAttachmentsProcessor.php#L140)
lá cờ in
Đó là một cách tiếp cận tuyệt vời. Cảm ơn rất nhiều. Nhưng tôi không thể làm cho nó hoạt động và không biết tại sao không. Lớp facet-is-not-active được xác định trong hook pre process_html trước hook pre process_block.facet-is-not-active-class hiển thị trong body class, nhưng không bị thay thế sau khi sử dụng bộ lọc facet.
lá cờ in
phải làm với một trong hai mệnh đề if `if ($variables['configuration']['provider'] == 'myblockid') { if (!in_array('hidden', (array) $variables['attributes']['class'])) {` ngay cả khi tôi kiểm tra nó với các khối khác có thể nhìn thấy mọi lúc, nó cũng không thay thế lớp cơ thể `facet-is-not-active-class` ban đầu.
4uk4 avatar
lá cờ cn
Tôi cũng đã thử nghiệm một số khối. Một số làm việc, những người khác không. Có vẻ như các khối được giữ chỗ chỉ có thể giữ chỗ trong khối. Thật không may, khối khía cạnh luôn được giữ chỗ vì nó đặt tuổi tối đa của bộ đệm là 0. Tôi sẽ xóa câu trả lời sau một thời gian nếu không có giải pháp nào xuất hiện. Thay vào đó, bạn có thể đính kèm thư viện javascript vào khối để kiểm tra khả năng hiển thị của các khía cạnh phía máy khách.
lá cờ in
nếu tôi có thể làm điều này, tôi có thể;) nhưng không biết làm thế nào :(

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