logo

Extra Block Types (EBT) - Neue Erfahrung im Layout Builder❗

Extra Block Types (EBT) - gestylte, anpassbare Blocktypen: Diashows, Registerkarten, Karten, Akkordeons und viele andere. Eingebaute Einstellungen für Hintergrund, DOM Box, Javascript Plugins. Erleben Sie die Zukunft der Layouterstellung schon heute.

Demo EBT-Module EBT-Module herunterladen

❗Extra Absatztypen (EPT) - Erfahrung mit neuen Absätzen

Extra Paragraph Types (EPT) - analoger, auf Absätzen basierender Satz von Modulen.

Demo EPT-Module EPT-Module herunterladen

Scroll

Drupal 7 hook_block_info() und hook_block_view(): Ausgabe von Informationen in einem Block

26/05/2025, by Ivan

In der letzten Lektion haben wir ein Modul für Drupal 7 erstellt. In dieser Lektion erweitern wir unser Modul. Wir fügen einen Block über die Hooks hook_block_view() und hook_block_info() hinzu. Der Block zeigt Informationen über die letzten Benutzer der Seite mit Links zu deren Profilseiten an.

Beginnen wir mit der Beschreibung von hook_block_info():

Dieser Hook definiert alle vom Modul erzeugten Blöcke.

Er bestimmt, welche Blöcke im Modul ausgegeben werden und kann Einstellungen zur Blockausgabe beschreiben.

In hook_block_info() erhält jeder Block einen eindeutigen Bezeichner "delta", der als Schlüssel im zurückgegebenen Array verwendet wird. Das delta muss im Modul einzigartig sein und wird für folgende Zwecke genutzt:

  1. Als Argument in weiteren Hooks, um den Block zu identifizieren, der konfiguriert oder ausgegeben wird.
  2. Für die Erstellung von HTML-Templates im Format "block-MODULE-DELTA", die Drupal für jeden Block generiert. Dies hilft bei CSS oder JavaScript.
  3. Für die Definition von Thematisierungsfunktionen block__MODULE__DELTA zur erweiterten Gestaltung.
  4. Zur Identifikation des Blocks in hook_block_info_alter() und anderen Hooks.

Das delta kann ein String oder eine Zahl sein, max. Länge 32 Bytes.

Rückgabewert

Ein assoziatives Array mit delta als Schlüssel und Block-Beschreibungen als Werte. Die Block-Beschreibungen sind wiederum assoziative Arrays mit Schlüssel-Wert-Paaren:

  • info (erforderlich): Lesbarer Name des Blocks für das Admin-Interface. Erscheint nicht auf der Website.
  • cache (optional): Cache-Verhalten. Mögliche Werte:
    • DRUPAL_CACHE_PER_ROLE (Standard): Block kann je nach Benutzerrolle variieren.
    • DRUPAL_CACHE_PER_USER: Block kann sich pro Benutzer unterscheiden.
    • DRUPAL_CACHE_PER_PAGE: Block kann je Seite unterschiedlich sein.
    • DRUPAL_CACHE_GLOBAL: Block ist für alle Benutzer und Seiten gleich.
    • DRUPAL_NO_CACHE: Block wird nicht gecached.
  • properties (optional): Array mit zusätzlichen Meta-Daten.

Übliche properties sind:

  • administrative: Boolean, ob der Block im administrativen Kontext verwendet wird.
  • weight: Initialer Wert für Gewicht des Blocks.
  • status: Initialer Status (1=aktiv, 0=deaktiviert).
  • region: Initialer Regionenwert.
  • visibility: Sichtbarkeitseinstellungen. Mögliche Werte:
    • BLOCK_VISIBILITY_NOTLISTED: Zeige auf allen Seiten außer bestimmten.
    • BLOCK_VISIBILITY_LISTED: Zeige nur auf bestimmten Seiten.
    • BLOCK_VISIBILITY_PHP: Sichtbarkeit mit eigenem PHP-Code definieren.
  • pages: Liste der Seitenpfade für Sichtbarkeit.

Beispiel: Einen Block hinzufügen via Hook:

<?php
function sitemade_block_info(){
    $blocks = array();
    $blocks[1]['info'] = 'Benutzerliste';
    return $blocks;
}
?>

Der Block erscheint in der Admin-Oberfläche und kann im linken Sidebar platziert werden:

drupal block

Nun den Blockinhalt ausgeben mit hook_block_view():

hook_block_view($delta = ''):

Parameter

$delta: Identifiziert den Block, der ausgegeben wird. Der Wert entspricht dem delta aus hook_block_info().

Rückgabe

Ein Array mit folgenden Elementen:

  • subject: Standardüberschrift des Blocks, übersetzt. Falls keiner vorhanden, NULL.
  • content: Blockinhalt, entweder als Render-Array (bevorzugt) oder als HTML-String.

Beispiel für den Hook:

<?php
function sitemade_block_view($delta = ''){
    $block = array(); // leeres Block-Array initialisieren
    switch ($delta){
        case 1:
            $block['subject'] = 'Benutzer'; // Blocktitel
            $block['content'] = ''; // String initialisieren
            $query = db_select('users', 'u') // Abfrage Benutzer
              ->fields('u', array('uid', 'name')) // Felder auswählen
              ->orderBy('u.uid', 'DESC') // absteigend sortieren
              ->range(0, 5) // fünf Benutzer auswählen
              ->execute(); // ausführen
            $users = $query->fetchAll(PDO::FETCH_ASSOC); // Array holen
            foreach($users as $user){
                $block['content'] .= '<div><a href="' . base_path() . 'user/' . $user['uid'] . '">' . $user['name'] . '</a></div>';
                // base_path() gibt den Pfad zur Seitenwurzel zurück
            }
        break;
    }
    return $block;
}
?>

Damit wird eine Liste der letzten 5 registrierten Benutzer mit Links zu deren Profilseiten ausgegeben. Für Links ist allerdings die Funktion l() besser geeignet, dazu sollte ein eigener Artikel verfasst werden.

Drupal list users