Les régions peuvent-elles être imprimées dans un modèle de nœud, ou les régions sont-elles strictement limitées aux modèles de page?
Vous pouvez imprimer des régions à l'intérieur de n'importe quel modèle, mais elles ne sont pas disponibles dès le départ dans le modèle node.tpl.php
. Pour les rendre disponibles, vous allez créer une nouvelle variable à utiliser dans votre modèle node.tpl.php
Qui contiendra tout le contenu de la région.
La création de nouvelles variables de modèle se fait à l'aide d'une fonction de prétraitement. Dans le fichier template.php
De votre thème, créez une fonction qui ressemble à ceci:
function mytheme_preprocess_node(&$variables) {
}
Remplacer mytheme
par le nom court de votre thème. Maintenant, pour que Drupal reconnaisse cette nouvelle fonction de prétraitement, vous devez reconstruire le registre des thèmes de votre site. C'est aussi simple que d'aller à Configuration → Développement → Performance et en appuyant sur le bouton "Effacer tous les caches" en haut.
Maintenant, le fonctionnement des fonctions de prétraitement est que $variables
Contient un tableau qui correspond aux variables disponibles de votre modèle. Par exemple, dans node.tpl.php
, $submitted
Contient la signature d'auteur. Dans la fonction de prétraitement ci-dessus, il se trouve dans $variables['submitted']
.
Pour imiter ce que vous avez dans page.tpl.php
, Où vous avez un tableau appelé $page
Qui contient toutes les régions, vous voudrez remplir $variables['page']
.
Le problème est que $page
Dans node.tpl.php
Est déjà rempli avec une valeur vrai/faux qui vous permet de savoir si vous regardez le nœud seul ou dans une liste.
Donc, pour éviter cette collision de noms, remplissez plutôt $region
:
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();
}
}
}
Ensuite, dans le modèle node.tpl.php
De votre thème, vous pouvez rendre n'importe quelle région en procédant comme suit:
<?php print render($region['sidebar_first']); ?>
Où sidebar_first
Est le nom de la région que vous souhaitez rendre.