Risposte:
È possibile stampare aree all'interno di qualsiasi modello, ma non sono disponibili immediatamente nel node.tpl.phpmodello. Per renderli disponibili, creerai una nuova variabile da utilizzare nel tuo node.tpl.phpmodello che conterrà tutto il contenuto della regione.
La creazione di nuove variabili di modello viene eseguita utilizzando una funzione di preelaborazione. Nel template.phpfile del tuo tema , crea una funzione simile alla seguente:
function mytheme_preprocess_node(&$variables) {
}
Sostituendo mythemecon il nome breve del tema. Ora, affinché Drupal riconosca questa nuova funzione di preelaborazione, è necessario ricostruire il registro dei temi del sito. Questo è semplice come andare su Configurazione → Sviluppo → Prestazioni e premere il pulsante "Cancella tutte le cache" in alto.
Ora, il modo in cui funzionano le funzioni di preelaborazione è che $variablescontiene un array che corrisponde alle variabili disponibili del modello. Ad esempio, in node.tpl.php, $submittedcontiene la riga dell'autore. Nella funzione di preelaborazione sopra, si trova in $variables['submitted'].
Per imitare quello che hai page.tpl.php, dove hai un array chiamato $pageche contiene tutte le regioni, vorrai popolare $variables['page'].
Il problema è che $pagein node.tpl.phpè già popolato con un valore vero / falso che ti consente di sapere se stai guardando il nodo da solo o in un elenco.
Quindi, per evitare quella collisione di nomi, popolare $regioninvece:
function mytheme_preprocess_node(&$variables) {
// Get a list of all the regions for this theme
foreach (system_region_list($GLOBALS['theme']) as $region_key => $region_name) {
// Get the content for each region and add it to the $region variable
if ($blocks = block_get_blocks_by_region($region_key)) {
$variables['region'][$region_key] = $blocks;
}
else {
$variables['region'][$region_key] = array();
}
}
}
Quindi, nel node.tpl.phpmodello del tuo tema , puoi eseguire il rendering di qualsiasi regione procedendo come segue:
<?php print render($region['sidebar_first']); ?>
Dov'è sidebar_firstil nome della regione che si desidera rendere.
<?php print render(block_get_blocks_by_region('machine_name_of_your_region'));?>. Da qui: webomelette.com/add-region-node-template
block_get_blocks_by_region()restituisce solo una matrice di blocchi e se vuoi renderlo come una regione, devi aggiungere un wrapper di regione.