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

Woraus besteht ein Drupal 7 Modul?

26/05/2025, by Ivan

Bevor wir unser Modul erstellen, möchte ich noch etwas zu den Möglichkeiten der Drupal API sagen. Die API bietet umfangreiche Funktionen zur Arbeit mit Taxonomie, Nodes, Benutzern sowie zur Ein- und Ausgabe aus der Datenbank. Für die Kommunikation zwischen Modulen und dem Drupal-Kern sowie zwischen Modulen gibt es das Hooks-System. Ein Hook ist ein Callback, das heißt, wenn der Code an einer bestimmten Stelle einen Hook aufruft, wird der Code deiner eigenen Funktion ausgeführt, die du im Modul definierst. So können wir Benutzerdaten, Menüs, Taxonomien oder Nodes verschiedener Inhaltstypen verarbeiten.

Auf dieser Seite findest du eine Liste der Kern-Hooks von Drupal:

http://api.drupal.org/api/drupal/includes--module.inc/group/hooks/7

Beachte, dass sich die Liste der Hooks je nach Drupal-Version unterscheidet. Wir werden ein Modul für Drupal 7 erstellen, also verwenden wir die Hooks für Version 7.
Drupal Hooks haben folgende Form:

Modulname_Hookname

Wo im Hookname das Wort "hook" steht, ersetzt du es durch den Namen deines Moduls.

Jetzt erstellen wir das Modul:

  1. Erstelle im Ordner sites/all/modules einen neuen Ordner mit dem Namen deines Moduls, z.B. site-made.
  2. Im Modul-Ordner legst du zwei Dateien an: Modulname.info und Modulname.module, z.B. sitemade.info und sitemade.module.

Drupal Modul

3. In der Datei sitemade.info schreiben wir:

;$Id$ // Kommentar für drupal.org Upload
name = Sitemade module // Name des Moduls in der Liste
package = sitemade // Paketname des Moduls
core = 7.x // Drupal Version
files[] = sitemade.module // PHP-Dateien im Modul

In sitemade.module schreiben wir den PHP-Code-Start:

<?php  // PHP-Tag, kann offen bleiben
//$Id$ // Für drupal.org Upload

Nun sollte dein Modul in der Modul-Liste erscheinen. Aktiviere es:

Drupal Modul

Jetzt können wir Code hinzufügen. Wir wollen den Textblock "History" auf der Benutzerseite entfernen:

Drupal block

Wir brauchen den Hook hook_user_view:

http://api.drupal.org/api/drupal/modules--user--user.api.php/function/hook_user_view/7

Dieser Hook wird aufgerufen, wenn Drupal den Code zur Benutzeranzeige ausführt. Wir können im Modul die History aus dem $account-Array entfernen. Öffne sitemade.module und füge hinzu:

function sitemade_user_view($account, $view_mode, $langcode){
    print_r($account);
}

Speichere und leere den Cache. Oben auf der Benutzerseite siehst du nun eine Ausgabe:

Drupal module

Das ist das Array $account, das der Hook liefert. print_r gibt das Array aus. Mit Firefox kannst du mit STRG+U die Seitenquelle ansehen und das Array untersuchen.

Drupal account

Beachte die Felder uid und name, sie enthalten Benutzer-ID und Benutzernamen. Diese Felder werden oft genutzt, z.B. für Links zu Profilen oder Inhalten.

Im Array ist noch kein History-Block enthalten. Wir probieren daher hook_user_view_alter:

http://api.drupal.org/api/drupal/modules--user--user.api.php/function/hook_user_view_alter/7

Ändere den Code zu:

function sitemade_user_view_alter($account, $view_mode, $langcode){
    print_r($account);
}

Speichere. Das ausgegebene Array ist anders: account ist nun ein Feld im Array. Im Feld summary steht die History-Info. Wir versuchen, die History mit unset zu entfernen:

function sitemade_user_view_alter($account, $view_mode, $langcode){
  unset($account['summary']);
  print_r($account);
}

Das summary-Feld ist gelöscht, aber der History-Block ist noch da. Warum? Weil $account ohne &-Zeichen nur eine Kopie ist, Änderungen greifen nicht auf die Originaldaten. Wir müssen $account per Referenz übergeben:

function sitemade_user_view_alter(&$account, $view_mode, $langcode){
  unset($account['summary']);
  print_r($account);
}

Speichere, leere den Cache, und die History verschwindet. Das &-Zeichen erzeugt eine Referenz auf $account. Mehr über Referenzen liest du in PHP-Tutorials.