Können Regionen innerhalb einer Knotenvorlage gedruckt werden oder sind Regionen streng auf Seitenvorlagen beschränkt?
Sie können Bereiche in jeder Vorlage drucken, diese sind jedoch nicht sofort in der node.tpl.php
Vorlage verfügbar . Um sie verfügbar zu machen, erstellen Sie eine neue Variable zur Verwendung in Ihrer node.tpl.php
Vorlage, die den gesamten Regionsinhalt enthält.
Das Erstellen neuer Vorlagenvariablen erfolgt mithilfe einer Vorverarbeitungsfunktion. template.php
Erstellen Sie in der Datei Ihres Themas eine Funktion, die folgendermaßen aussieht:
function mytheme_preprocess_node(&$variables) {
}
Ersetzen mytheme
durch den Kurznamen Ihres Themas. Damit Drupal diese neue Vorverarbeitungsfunktion erkennt, müssen Sie die Themenregistrierung Ihrer Site neu erstellen. Dies ist so einfach, wie Sie zu Konfiguration → Entwicklung → Leistung gehen und oben auf die Schaltfläche "Alle Caches löschen" klicken.
Die Funktionsweise von Vorverarbeitungsfunktionen besteht nun darin, dass sie $variables
ein Array enthalten, das den verfügbaren Variablen Ihrer Vorlage entspricht. Zum Beispiel in node.tpl.php
, $submitted
enthält den Autor rechte Seite durch . In der obigen Vorverarbeitungsfunktion befindet sie sich in $variables['submitted']
.
Um nachzuahmen, was Sie in haben page.tpl.php
, wo Sie ein Array mit dem Namen haben $page
, das alle Regionen enthält, möchten Sie auffüllen $variables['page']
.
Das Problem ist, dass $page
in node.tpl.php
bereits mit einem True / False-Wert gefüllt ist, mit dem Sie wissen, ob Sie den Knoten alleine oder in einer Auflistung betrachten.
Um diese Namenskollision zu vermeiden, füllen Sie $region
stattdessen Folgendes aus:
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();
}
}
}
Anschließend können Sie in der node.tpl.php
Vorlage Ihres Themas einen beliebigen Bereich rendern, indem Sie folgende Schritte ausführen:
<?php print render($region['sidebar_first']); ?>
Wo sidebar_first
ist der Name der Region, die Sie rendern möchten?
<?php print render(block_get_blocks_by_region('machine_name_of_your_region'));?>
. Von hier aus: webomelette.com/add-region-node-templateblock_get_blocks_by_region()
nur ein Array von Blöcken zurückgegeben wird. Wenn Sie es als Region rendern möchten, müssen Sie einen Regionswrapper hinzufügen.