특정 블록에 대해서만 전처리 변수


11

특정 블록에 대해서만 전처리 변수가 가능합니까? 그런 기능을 mytheme_preprocess_block__aggregator(&$vars)만들었지 만 작동하지 않습니다.

-- 편집하다 --

Drupal 8 https://drupal.org/node/1751194 에서 수정 된 것으로 보입니다.


편집 한 내용과 거기에 붙여 넣은 링크는 테마 후크 제안 만 처리하는 것 같습니다.
leymannx

답변:


20

불행히도 그렇게하는 방법은 없습니다 (hook_form_alter ()와 유사).

가장 좋은 방법은 $ variables [ 'block']-> bid를 사용하여 원하는 블록에만 수정 사항을 적용하는 것입니다.

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에서는 특정 블록에 대한 전처리 기능을 작성할 수 있습니다. 예를 들면 다음과 같습니다.

드루팔 8

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

그러나 hook_preprocess_block 및 플러그인 ID를 사용할 수도 있습니다.

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과 ID 확인을 고수해야합니다.

드루팔 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.