Score:2

ตั้งค่า Body Class หาก Facet ทำงานอยู่

ธง in

ฉันต้องตั้งค่าคลาสเนื้อหาหากเปิดใช้งานตัวกรองข้อมูลประกอบ

ควรทำใน yourtheme_preprocess_html

หาก Facet เปิดใช้งานอยู่
แล้ว
$variables['attributes']['class'][] = 'facet-active';

สำหรับข้อความค้นหาแบบเต็มจะทำงานเช่นนั้น

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

ใครรู้วิธีขุดข้อมูลว่า facet ทำงานอยู่หรือไม่

ขอบคุณล่วงหน้า

มัทธีอัส

Score:2
ธง cn

คุณไม่รู้ว่าเมื่อใดที่เทมเพลต HTML แสดงผลว่า facet ทำงานอยู่หรือไม่ ดังนั้นใน mytheme_preprocess_html() ถือว่าไม่ใช่:

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

ในบล็อก facets ให้แทนที่คลาสตัวยึดตำแหน่งหากมองเห็นบล็อกได้:

ฟังก์ชัน mytheme_preprocess_block(&$ตัวแปร) {
  ถ้า (ตัวแปร $ ['การกำหนดค่า'] ['ผู้ให้บริการ'] == 'แง่มุม') {
    ถ้า (!in_array('hidden', (array) $variables['attributes']['class'])) {
      $variables['#attached']['placeholders']['facet-is-not-active-class'] = [
        '#markup' => 'facet-active',
      ];
    }
  }
}

สิ่งสำคัญคือสตริงตัวยึด facet-is-not-active-class ไม่ซ้ำกัน ใช้ชื่อที่ยาวขึ้นหรือแม้กระทั่งแฮช ตัวยึดตำแหน่งจะถูกแทนที่สำหรับสตริงที่เกิดขึ้นทั้งหมดบนเพจ

ปัญหาเกี่ยวกับตัวยึดตำแหน่งที่ซ้อนกัน

วิธีนี้ใช้ได้เฉพาะกับบล็อกที่ไม่ได้วางตำแหน่งอัตโนมัติ น่าเสียดายที่บล็อก facet ถูกแทนที่เสมอ มันตั้งค่าอายุแคชสูงสุดเป็น 0 ซึ่งตรงตามเงื่อนไขเริ่มต้นสำหรับการยึดตำแหน่งอัตโนมัติ ดู https://www.drupal.org/docs/drupal-apis/render-api/auto-placeholdering#s-อะไร

เพื่อป้องกันไม่ให้คุณสามารถตั้งค่า #create_placeholder เป็น FALSE:

/**
 * ใช้ hook_block_build_BASE_BLOCK_ID_alter()
 */
ฟังก์ชัน mymodule_block_build_facet_block_alter (อาร์เรย์ &$build, \Drupal\Core\Block\BlockPluginInterface $block) {
  $build['#create_placeholder'] = FALSE;
}

ข้อแม้: นี่เป็นตัวฆ่าประสิทธิภาพที่แท้จริง มันเพิ่มเวลาในการโหลดหน้าเว็บเป็นสองเท่าในการทดสอบของฉัน ดังนั้น หากประสิทธิภาพเป็นสิ่งสำคัญ คุณควรมองหาโซลูชันฝั่งไคลเอ็นต์ CSS ที่ดีกว่า หรือไลบรารีจาวาสคริปต์ที่เพิ่มคลาสที่จำเป็น

ru flag
ฉันไม่รู้จัก `$variables['#attached']['placeholders']` พิเศษนั้นมาก่อน มีเอกสารประกอบสำหรับความเป็นไปได้ทั้งหมดภายในอาร์เรย์ `#attached` หรือไม่ ฉันรู้จักคีย์ `drupalSettings`, `libraries` และ `html_head` ในนั้น แต่ดูเหมือนว่าจะมีอะไรอีกมาก
ru flag
เกี่ยวกับคีย์วิเศษใน `$variables['#attached']`: googled ตัวเองจาก [บล็อกนี้](https://davidjguru.github.io/blog/drupal-tips-the-magic-of-attached) ไปยัง [เอกสาร API](https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Render%21HtmlResponseAttachmentsProcessor.php/function/HtmlResponseAttachmentsProcessor%3A%3AprocessAttachments/9.3.x) สำคัญ: อ่านนอกเหนือจากเอกสารในส่วนหัวและดูที่[(un-)รหัสที่รองรับในโค้ด](https://git.drupalcode.org/project/drupal/-/blob/9.4.x/core/lib/ Drupal/Core/Render/HtmlResponseAttachmentsProcessor.php#L140)
in flag
นั่นเป็นแนวทางที่ยอดเยี่ยม ขอบคุณมาก. แต่ฉันไม่สามารถใช้งานได้และไม่รู้ว่าทำไม คลาส facet-is-not-active ถูกกำหนดไว้ในตะขอ preprocess_html ก่อนตะขอ preprocess_blockfacet-is-not-active-class ปรากฏในคลาสเนื้อหา แต่จะไม่ถูกแทนที่หลังจากใช้ตัวกรอง facet
in flag
ต้องเกี่ยวข้องกับ if ข้อใดข้อหนึ่งจากสองข้อ `ถ้า (ตัวแปร $ ['การกำหนดค่า'] ['ผู้ให้บริการ'] == 'myblockid') { if (!in_array('hidden', (array) $variables['attributes']['class'])) {` แม้ว่าฉันจะทดสอบกับบล็อกอื่น ๆ ซึ่งมองเห็นได้ตลอดเวลา แต่ก็ไม่ได้แทนที่ bodyclass `facet-is-not-active-class' เริ่มต้น
4uk4 avatar
cn flag
ฉันได้ทดสอบบางบล็อกด้วย บางงาน บางงานไม่ได้ ดูเหมือนว่าบล็อกที่ถูกแทนที่ด้วยตัวมันเองจะสามารถแทนที่ได้เฉพาะในบล็อกเท่านั้น น่าเสียดายที่บล็อก facet ถูกแทนที่เสมอเพราะตั้งค่าแคชอายุสูงสุดเป็น 0 ฉันลบคำตอบหลังจากนั้นสักครู่หากไม่มีวิธีแก้ปัญหา คุณสามารถแนบไลบรารีจาวาสคริปต์เข้ากับบล็อกเพื่อตรวจสอบการมองเห็นของฝั่งไคลเอ็นต์ของ facets
in flag
ถ้าฉันทำได้ ฉันก็ทำได้ ;) แต่ฉันไม่รู้ว่าจะทำอย่างไร :(

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา