ตัวแปรประมวลผลล่วงหน้าสำหรับบล็อกบางตัวเท่านั้น


11

เป็นไปได้ที่ตัวแปรก่อนการประมวลผลสำหรับบล็อกบางอย่างเท่านั้นหรือไม่ ฉันได้สร้างฟังก์ชั่นดังกล่าวmytheme_preprocess_block__aggregator(&$vars)แต่มันไม่ทำงาน

- แก้ไข -

ดูเหมือนว่าจะได้รับการแก้ไขใน Drupal 8 https://drupal.org/node/1751194


การแก้ไขที่คุณทำและลิงก์ที่คุณวางไว้ดูเหมือนจะจัดการกับคำแนะนำเบ็ดธีมเท่านั้นใช่ไหม
leymannx

คำตอบ:


20

ขออภัยไม่มีวิธีที่จะทำเช่นนั้น (คล้ายกับ hook_form_alter ())

วิธีที่ดีที่สุดในการทำเช่นนี้คือการใช้ $ ตัวแปร ['บล็อก'] -> การเสนอราคาเพื่อใช้การปรับเปลี่ยนเฉพาะกับบล็อกที่คุณต้องการ:

function mytheme_preprocess_block(&$variables) {
  if ($variables['block']->bid === 'target_block_id') {
    // do something for this block
  } else if ($variables['block']->bid === 'other_target_block_id') {
    // do something else for this other block
  }
}

4
ผมมองไปที่รหัส Drupal และ Drupal ไม่ได้มองหาหรือhook_preprocess_block_MODULE() THEME_preprocess_block_MODULE()มันจัดการในลักษณะเฉพาะที่__มีอยู่ในชื่อฟังก์ชั่นชุดรูปแบบเมื่อtheme()มีการเรียกtheme('links__contextual__node', ...)เช่น
kiamlaluno

อืมรู้ดี!
Alex Weber

'block_id' มักจะชื่อเครื่องของบล็อกถูกต้องหรือไม่
chrisjlee

2
โปรดใช้$variables['block']->bidและไม่ใช่$variables['block_id']ในฐานะ "block_id" ไม่ซ้ำกับบล็อกนั้น
Duncanmoo

3
ฉันคิดว่ามันเป็นมิตรขึ้นเล็กน้อยที่จะเปิด$variables['block']->deltaถ้ามีเงื่อนไข$variables['block']->module == 'MODULE'
Pete

3

เพียงเพื่อยืนยันใน Drupal 8 คุณสามารถเขียนฟังก์ชัน preprocess สำหรับบล็อกเฉพาะ ตัวอย่างเช่น:

Drupal 8

mytheme_preprocess_block__system_branding_block(&$vars) {
  // Make changes to the the system branding block
}

แต่คุณสามารถใช้ hook_preprocess_block และรหัสปลั๊กอิน:

function mytheme_preprocess_block(&$vars) {
  if ($vars['plugin_id'] == 'system_branding_block') {
    // Make changes to the the system branding block
  }
}

ตามที่ Alex พูดถึงใน Drupal 7 คุณจะต้องติดกับ HOOK_preprocess_block และตรวจสอบรหัส:

Drupal 7

mytheme_preprocess_block(&$vars) {
  if ($vars['block']->bid === 'target_block_id') {
    // make changes to this block
  }
}

พยายามออกในขณะนี้บน D8, ค่างานหรือไม่MYTHEME_preprocess_block__system_branding_block(&$vars) MYTHEME_preprocess_block__page_title_block(&$variables)
leymannx

2
mytheme_preprocess_block__{my_block_machine_name}(&$variables)ทำงานกับ D8.3
Tim
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.