Antworten:
Sie können Bereiche in jeder Vorlage drucken, diese sind jedoch nicht sofort in der node.tpl.phpVorlage verfügbar . Um sie verfügbar zu machen, erstellen Sie eine neue Variable zur Verwendung in Ihrer node.tpl.phpVorlage, die den gesamten Regionsinhalt enthält.
Das Erstellen neuer Vorlagenvariablen erfolgt mithilfe einer Vorverarbeitungsfunktion. template.phpErstellen Sie in der Datei Ihres Themas eine Funktion, die folgendermaßen aussieht:
function mytheme_preprocess_node(&$variables) {
}
Ersetzen mythemedurch 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 $variablesein Array enthalten, das den verfügbaren Variablen Ihrer Vorlage entspricht. Zum Beispiel in node.tpl.php, $submittedenthä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 $pagein node.tpl.phpbereits 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 $regionstattdessen 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.phpVorlage Ihres Themas einen beliebigen Bereich rendern, indem Sie folgende Schritte ausführen:
<?php print render($region['sidebar_first']); ?>
Wo sidebar_firstist 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-template
block_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.