Risposte:
È possibile stampare aree all'interno di qualsiasi modello, ma non sono disponibili immediatamente nel node.tpl.php
modello. Per renderli disponibili, creerai una nuova variabile da utilizzare nel tuo node.tpl.php
modello che conterrà tutto il contenuto della regione.
La creazione di nuove variabili di modello viene eseguita utilizzando una funzione di preelaborazione. Nel template.php
file del tuo tema , crea una funzione simile alla seguente:
function mytheme_preprocess_node(&$variables) {
}
Sostituendo mytheme
con 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 $variables
contiene un array che corrisponde alle variabili disponibili del modello. Ad esempio, in node.tpl.php
, $submitted
contiene 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 $page
che contiene tutte le regioni, vorrai popolare $variables['page']
.
Il problema è che $page
in 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 $region
invece:
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.php
modello del tuo tema , puoi eseguire il rendering di qualsiasi regione procedendo come segue:
<?php print render($region['sidebar_first']); ?>
Dov'è sidebar_first
il 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.