web-dev-qa-db-fra.com

Prétraiter les variables uniquement pour certains blocs

Est-il possible de prétraiter des variables uniquement pour certains blocs? J'ai créé une telle fonction: mytheme_preprocess_block__aggregator(&$vars) mais cela ne fonctionne pas.

-- ÉDITER --

Il semble être corrigé dans Drupal 8 https://drupal.org/node/1751194

10
ya.teck

Malheureusement, il n'y a aucun moyen de le faire comme ça (similaire à hook_form_alter ()).

La meilleure façon de le faire serait d'utiliser $ variables ['block'] -> bid pour n'appliquer les modifications qu'aux blocs que vous souhaitez:

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

Juste pour confirmer, dans Drupal 8, vous pouvez écrire des fonctions de prétraitement pour des blocs spécifiques. Par exemple:

Drupal 8

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

Mais vous pouvez également utiliser hook_preprocess_block et l'ID du plugin:

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

Comme mentionné par Alex, dans Drupal 7, vous devrez vous en tenir à HOOK_preprocess_block et à une vérification d'identité:

Drupal 7

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