Mini Modul mit Drupal 6, andere Syntax gegenüber Drupal 5
Beim Erstellen von Minimodulen für Drupal 6 gibt es im Vergleich zu Drupal 5 Änderungen:
Fiktives Minimodul mit Namen "my_minimodule".
In der Minimodul-Datei "my_minimodule.info":
; $Id: my_minimodule.info, v 1.0 2008/09/30 19:00:00 quiptime $
name = Mp3 button change
description = Allows the change of name from the save button of node type mp3.
package = Mini modules
version = VERSION
core = 6.x
; Information added by quiptime on 2008-09-30
version = "6.x-dev"
project = "my_minimodule"
In der eigentlichen Minimodul-Datei "my_minimodule.module":
<?php /* $Id: my_minimodule.module,v 1.0 2008/09/30 19:03:00 quiptime $ */
function my_minimodule_form_alter(&$form, $form_state, $form_id) {
//print $form_id;
//print '<pre style="background-color: white;">';
//print_r($form);
//print '</pre>';
if( $form_id == 'my_special_formid' ) {
$form['buttons']['submit']['#value'] = 'Super Submit';
}
}
?>
Wesentliche Änderung gegenüber Drupal 5 sind die Funktions-Argumente &$form, $form_state, $form_id
, die so in der Funktion enthalten sein müssen. Das "&" vor $form
ist kein Schreibfehler!
Ebenso wurde in Drupal 6 die Form API geändert. Damit ergibt sich eine anderes Ansprechen der einzelnen Formular-Elemente im $form Array.
Um das $form Array "aufzulösen", d. h. um zu sehen wie man das $form Array ansprechen kann, wird der im Codebeispiel kommentierte Code
<?php
//print '<pre style="background-color: white;">';
//print_r($form);
//print '</pre>';
?>
durch
<?php
print '<pre style="background-color: white;">';
print_r($form);
print '</pre>';
?>
ausgegeben.
Damit kann man wunderbar erkennen wie einzelne Formular-Elemente angesprochen werden können.
Die Verwendung des HTML Tag <pre></pre>
ist ein kleiner Trick um die Ausgabe von print_r()
in lesbarer Form zu erhalten. Ohne "pre" erfolgt die Ausgabe einzeilig und ist nur schwer erfassbar.
Die Verwendung von style="background-color: white;"
ist optional und stellt lediglich sicher das bei bestimmten Themes die Ausgabe von print_r()
vor weissem Hintergrund lesbar ist.
print_r($form)
Hier ein Screenshot von einem Teil der Anzeige von /files/print_r_form.png
die aufzeigt wie man das $form Array anspricht um im Minimodul das Formular-Element des Submitbutton mit neuem Inhalt zu versehen.
Minimodul aktivieren
Namenskonventionen
Der Name eines Minimodules kann frei gewählt werden. Naheliegend sind Bezeichnungen die auf die Funktion des Modules schließen lassen.
Die beiden erstellten Dateien eines Minimodul werden in einem Ordner mit dem gleichen Namen wie das Minimodul gespeichert. Also im Beispiel im Ordner "my_minimodule".
Als Nächstes wird dieser Ordner "my_minimodule" per FTP zum Webserver in die Drupalinstallation in den Ordner /sites/all/modules heraufgeladen. Wer mehrere Minimodule etwas organisierter in seiner Drupalinstallation ablegen möchte kann sich in /sites/all/modules einen Ordner "minimodules" erstellen und in diesem Ordner, also /sites/all/modules/minimodules, alle seine Minimodule versammeln. Dieser extra Ordner würde mit dem selbst gewählten Namen
package = Mini modules
in der Datei "my_minimodule.info" konform gehen.
Nun wird das neue Minimodul in der Moduladministration unter /admin/build/modules aktiviert.
Hier ein Screenshot der Moduladministration einer Drupalinstallation mit mehreren Minimodulen:
Hier wird auch sichtbar wie sich die Angabe package = Mini modules
in der info Datei des Minimodules auswirkt.
Drupal Hook's und Namenskonventionen
Bezeichnungen für im Modul verwendete Funktionen müssen immer dann mit dem Namen des Modules konform gehen wenn mit den einzelnen Funktionen Hook's von Drupal verwendet werden. Beispiel:
<?php
/**
* Implementation of hook_perm().
*/
function my_minimodule_perm() {
return array('Access my minimodule');
}
?>
Funktionen die keine Hook's verwenden können beliebig bezeichnet werden.
Weiteres
Ein aktiviertes Modul steht systemweit zur Verfügung. Das bedeutet man kann in einem Minimodul PHP Code unterbringen den man an beliebigen Stellen, beispielsweise einem Nodetype Template, verwenden kann.
Einfaches Beispiel
Man möchte irgendwo in der Drupalinstallation die Möglichkeit haben die Worte "Drupal ist eines der besten CMS." anzuzeigen. Einzige Bedingung dabei ist das man an dieser Stelle PHP Code schreiben kann. Dann würde ein Minimodul folgenden Code enthalten:
<?php /* $Id: drupal_information.module, v 1.0 2008/10/12 12:12:54 quiptime $ */
function drupal_info() {
print theme('drupal_info_print');
}
/*
* Theme function
*/
function theme_drupal_info_print() {
$output = '';
$output = 'Drupal ist eines der besten CMS.';
return $output;
}
?>
Um dieses Minimodul zu seiner Arbeit zu bewegen muss an den gewünschten Stellen die Funktion
drupal_info()
ansprechen:<?php
drupal_info();
?>
In diesem Beispiel gibt es zusätzlich eine Theme Funktion.
Dadurch ist man in der Lage, für die Ausgabe die das Minimodul produziert, ein Template zu verwenden. Dieses Template hat die Bezeichnung "drupal_info_print.tpl.php" und kann, im Falle von Drupal 6 ohne weiteres tun zu müssen, als Datei "drupal_info_print.tpl.php" im Ordner des verwendeten Themes abgelegt werden.
Die Template Datei "drupal_info_print.tpl.php" würde folgenden Inhalt bekommen:
<?php /* $Id: drupal_info_print.tpl.php, v 1.0 2008/10/12 12:19:05 quiptime $ */
$output = '';
$output .= '<div>Drupal ist eines der besten CMS der Welt.';
print $output;
?>
Hier eine einfache Änderung um die Ausgabe des Modules zu optimieren.
<?php /* $Id: drupal_info_print.tpl.php, v 1.0 2008/10/12 12:19:05 quiptime $ */
$output = '';
$output .= '<div class="drupal-info">';
$output .= 'Drupal ist eines der besten CMS der Welt.</div>';
$output .= '</div>';
print $output;
?>
Auch wenn die Vorgehensweise mit dem Template im Minimodul in diesem Beispiel etwas sinnlos erscheint, sie soll das Prinzip aufzeigen.
Und man sollte in diesem Zusammenhang auch bedenken das selbst geschriebene Module bei ein wenig Übung schnell den Status "Mini" verlassen und zu "vollwertigen" Modulen mit vielen Zeile Code werden. In dieser Situation ist es nicht nur guter Styl, als Modul-Entwickler mit Theme Funktionen zu arbeiten, sondern auch sinnvolle Praxis.
- Anmelden oder Registrieren um Kommentare zu schreiben
Neue Kommentare
vor 2 Tagen 21 Stunden
vor 3 Tagen 22 Minuten
vor 3 Tagen 33 Minuten
vor 3 Tagen 34 Minuten
vor 3 Tagen 21 Stunden
vor 3 Tagen 23 Stunden
vor 4 Tagen 20 Stunden
vor 5 Tagen 13 Stunden
vor 5 Tagen 14 Stunden
vor 5 Tagen 17 Stunden