web-dev-qa-db-ja.com

特定のブロックに対してのみ変数を前処理する

特定のブロックに対してのみ変数を前処理することは可能ですか?私はそのような関数を作成しました:mytheme_preprocess_block__aggregator(&$vars)が機能しません。

-編集-

Drupal 8 https://drupal.org/node/1751194 で修正されているようです

10
ya.teck

残念ながら、そのようにする方法はありません(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
  }
}
20
Alex Weber

確認のために、Drupal 8では、特定のブロックの前処理関数を記述できます。次に例を示します。

Drupal 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チェックを使用する必要があります。

Drupal 7

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