Stampa delle regioni in html.tpl.php


10

Devo generare alcune regioni nel modello html.tpl.php poiché non cambiano tra page.tpl.php e page-front.tpl.php (solo per citarne due). Fondamentalmente voglio evitare la duplicazione del codice.

Tuttavia sembra che non ci sia nulla associato alle regioni in html.tpl.php, né ho potuto recuperare nulla usando drupal_get_region_content (sia con che senza parametri restituisce solo un array vuoto).

Idee?


Hai usato drupal_set_region_content()per impostare il contenuto della regione?
kiamlaluno

2
Non esiste una tale funzione. Forse intendevi drupal_add_region_content()ma non ci vedo nulla: ho impostato i contenuti delle regioni attraverso l'interfaccia di amministrazione dei blocchi.
Morpheu5,

1
Sì, intendevo dire drupal_add_region_content().
kiamlaluno

Risposte:


18

Ho risolto in questo modo:

function mytheme_preprocess_html(&$variables) {
    $variables['region_name'] = block_get_blocks_by_region('region_name');
}

e poi potrei fare

<?php print render($region_name) ?>

Perché usare l'eco? Certo che funziona.
SDMulroy,

Certo, se stavo implementando un modulo o un tema pubblico sarei costretto a seguire gli standard della comunità. Questo era un tema personalizzato che veniva utilizzato esclusivamente dal mio cliente.
Morpheu, 5

So che si tratta di un post estremamente vecchio, ma penso che sia in cattivo giudizio accettare una risposta in cui l'autore della risposta risponde pigramente alla domanda. ad es. Fornisci una funzione da aggiungere, ma supponi che tutti i lettori sapranno magicamente dove dovrebbe vivere questo codice. Questa è la parte pigra e sto votando verso il basso perché non fornisce nulla agli utenti / sviluppatori di drupal principianti.
Birilli

Apprezzo il tuo contributo e il fatto che i novizi potrebbero non ottenere una spiegazione completa. Tuttavia, tieni presente che a) l'allattamento al cucchiaio rende i principianti pigri eb) a chiunque abbia persino letto rapidamente i documenti (come dovrebbe fare qualsiasi novizio non pigro), il posizionamento di tale funzione dovrebbe essere relativamente ovvio. Se non lo è, allora c'è un manuale per una buona ragione. La mia domanda (e risposta) affronta un problema a un livello in cui si può presumere una certa conoscenza di base della tematica Drupal. Inoltre, questo è un sito di domande e risposte, il sito di Docs è accanto.
Morpheu5

1
@Skitties Non possiamo duplicare qui la documentazione solo perché i nuovi utenti non sono in grado di sapere quali funzioni di preelaborazione sono quelle mostrate nella domanda. Questo non fa nemmeno parte della domanda. Se gli utenti hanno una domanda specifica per le funzioni di preelaborazione, porranno una nuova domanda.
kiamlaluno

2

drupal_get_region_content()restituisce il contenuto che è stato impostato con le precedenti chiamate a drupal_add_region_content(), ma non include il contenuto dei blocchi, che sono resi nella pagina tramite block_page_build () .

Se cerchi "drupal_add_region_content" nel codice sorgente di Drupal, noterai che la funzione viene chiamata da:

  • drupal_get_region_content()
  • install_display_output()
  • template_preprocess_maintenance_page()
  • update_task_list()

Ciò che si imposta per i blocchi nella pagina amministrativa è in quali aree verranno resi i blocchi, ma il loro contenuto non viene aggiunto drupal_add_region_content(); infatti, nessuna delle funzioni sopra elencate (che sono le uniche funzioni che chiamano drupal_add_region_content(), tranne il codice per testare un'installazione di Drupal) è per il rendering / aggiunta del contenuto del blocco.

Se è necessario eseguire il rendering dei blocchi nel proprio codice, è necessario controllare il codice utilizzato in block_page_build(). In particolare, questo è il codice che è probabilmente più utile per te:

  // Fetch a list of regions for the current theme.
  $all_regions = system_region_list($theme);

  $item = menu_get_item();
  if ($item['path'] != 'admin/structure/block/demo/' . $theme) {
    // Load all region content assigned via blocks.
    foreach (array_keys($all_regions) as $region) {
      // Assign blocks to region.
      if ($blocks = block_get_blocks_by_region($region)) {
        $page[$region] = $blocks;
      }
    }
    // …
  }

Le prime due righe verificano che la pagina visualizzata non sia la pagina dimostrativa utilizzata per mostrare dove sono posizionate le aree tematiche.

Se devi renderizzare i blocchi in un modo diverso, è più probabile che tu sia interessato a sovrascrivere theme_block () nel tuo tema, o (ancora più probabilmente) creare un file modello block.tpl.php personalizzato. Un altro modo per modificare la modalità di rendering dei blocchi è utilizzare una funzione di preelaborazione per i blocchi ( hook_preprocess_block () ).

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.