it-swarm.com.de

Druckbereiche in html.tpl.php

Ich muss einige Regionen in der Vorlage html.tpl.php ausgeben, da sich diese nicht zwischen page.tpl.php und page-front.tpl.php ändern (um nur zwei zu nennen). Grundsätzlich möchte ich Codeduplizierungen vermeiden.

Es scheint jedoch nichts mit Regionen in html.tpl.php zu tun zu haben, und ich könnte auch nichts mit drupal_get_region_content abrufen (sowohl mit als auch ohne Parameter wird nur ein leeres Array zurückgegeben).

Ideen?

10
Morpheu5

Ich habe so gelöst:

function mytheme_preprocess_html(&$variables) {
    $variables['region_name'] = block_get_blocks_by_region('region_name');
}

und dann könnte ich tun

<?php print render($region_name) ?>
18
Morpheu5

drupal_get_region_content() gibt den Inhalt zurück, der bei früheren Aufrufen von drupal_add_region_content() festgelegt wurde, enthält jedoch nicht den Inhalt der Blöcke, die auf der Seite durch block_page_build) gerendert werden () .

Wenn Sie in Drupal Quellcode) nach "drupal_add_region_content" suchen, werden Sie feststellen, dass die Funktion aufgerufen wird von:

  • drupal_get_region_content()
  • install_display_output()
  • template_preprocess_maintenance_page()
  • update_task_list()

Was Sie für die Blöcke auf der Verwaltungsseite festlegen, ist, in welchen Regionen die Blöcke gerendert werden, deren Inhalt jedoch nicht mit drupal_add_region_content() hinzugefügt wird. Tatsächlich dient keine der oben aufgeführten Funktionen (die die einzigen Funktionen sind, die drupal_add_region_content() aufrufen, mit Ausnahme des Codes zum Testen einer Drupal -Installation) zum Rendern/Hinzufügen des Blockinhalts .

Wenn Sie die Blöcke in Ihrem eigenen Code rendern müssen, sollten Sie den in block_page_build() verwendeten Code überprüfen. Dies ist insbesondere der Code, der für Sie wahrscheinlich nützlicher ist:

  // Fetch a list of regions for the current theme.
  $all_regions = system_region_list($theme);

  $item = menu_get_item();
  if ($item['path'] != 'admin/structure/block/demo/' . $theme) {
    // Load all region content assigned via blocks.
    foreach (array_keys($all_regions) as $region) {
      // Assign blocks to region.
      if ($blocks = block_get_blocks_by_region($region)) {
        $page[$region] = $blocks;
      }
    }
    // …
  }

In den ersten beiden Zeilen wird überprüft, ob die angezeigte Seite nicht die Demoseite ist, auf der angezeigt wird, wo die Themenbereiche platziert sind.

Wenn Sie die Blöcke auf andere Weise rendern müssen, ist es wahrscheinlicher, dass Sie theme_block () in Ihrem Thema überschreiben oder (noch wahrscheinlicher) eine benutzerdefinierte block.tpl.php-Vorlage erstellen möchten Datei. Eine andere Möglichkeit, die Art und Weise zu ändern, in der die Blöcke gerendert werden, besteht darin, eine Vorverarbeitungsfunktion für die Blöcke zu verwenden ( hook_preprocess_block () ).

2
kiamlaluno