Preprocessa le variabili solo per determinati blocchi


11

È possibile preelaborare le variabili solo per determinati blocchi? Ho creato tale funzione: mytheme_preprocess_block__aggregator(&$vars)ma non funziona.

-- MODIFICARE --

Sembra essere stato corretto in Drupal 8 https://drupal.org/node/1751194


La modifica che hai fatto e il link che hai incollato lì sembrano riguardare solo i suggerimenti di hook a tema, non è vero?
leymannx,

Risposte:


20

Sfortunatamente, non c'è modo di farlo in questo modo (simile a hook_form_alter ()).

Il modo migliore per farlo sarebbe usare $ variabili ['blocco'] -> bid per applicare le modifiche solo ai blocchi desiderati:

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
Ho guardato il codice Drupal e Drupal non cerca hook_preprocess_block_MODULE()o THEME_preprocess_block_MODULE(). Gestisce in modo particolare il __contenuto dei nomi delle funzioni del tema, quando theme()viene invocato come theme('links__contextual__node', ...), ad esempio.
kiamlaluno

Hmm, buono a sapersi!
Alex Weber,

'block_id' è in genere il nome della macchina del blocco corretto?
chrisjlee,

2
Si prega di utilizzare $variables['block']->bide non $variables['block_id']come 'block_id' non è univoco per quel blocco.
Duncanmoo,

3
Penso che sia un po 'più amichevole accendere condizionatamente $variables['block']->deltase$variables['block']->module == 'MODULE'
Pete

3

Giusto per confermare, in Drupal 8 è possibile scrivere funzioni di preelaborazione per blocchi specifici. Per esempio:

Drupal 8

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

Ma potresti anche usare hook_preprocess_block e l'ID del plugin:

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

Come accennato da Alex, in Drupal 7 dovrai rimanere con HOOK_preprocess_block e un controllo dell'id:

Drupal 7

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

Ho provato subito su D8, né MYTHEME_preprocess_block__system_branding_block(&$vars)funziona né funziona MYTHEME_preprocess_block__page_title_block(&$variables).
leymannx,

2
mytheme_preprocess_block__{my_block_machine_name}(&$variables)funziona su D8.3
Tim
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.