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 node.tpl.php
modèle. Pour les rendre disponibles, vous allez créer une nouvelle variable à utiliser dans votre node.tpl.php
modèle 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 template.php
fichier 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 dans Configuration → Développement → Performances et d'appuyer sur le bouton "Effacer tous les caches" en haut.
Maintenant, la façon dont les fonctions de prétraitement fonctionnent est celle qui $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 page.tpl.php
, où vous avez un tableau appelé $page
qui contient toutes les régions, vous souhaitez remplir $variables['page']
.
Le problème est que $page
dans node.tpl.php
est déjà rempli avec une valeur vraie / fausse qui vous permet de savoir si vous regardez le nœud seul ou dans une liste.
Donc, pour éviter cette collision de noms, remplissez $region
plutôt:
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 node.tpl.php
modèle 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.
<?php print render(block_get_blocks_by_region('machine_name_of_your_region'));?>
. De là: webomelette.com/add-region-node-templateblock_get_blocks_by_region()
renvoie uniquement un tableau de blocs et si vous souhaitez le rendre en tant que région, vous devez ajouter un wrapper de région.