Deutsch:Erstellen von Modulen

Einleitung
In phpBB3 kannst du eigene Module für den Benutzer,  Moderator und für den Administration Control Panel (Administrations-Bereich) erstellen. Dieser Ansatz hat viele Vorteile gegenüber dem erstellen einer kompletten, von Grund auf neuen, Seite wie es im Adding pages (Hinzufügen von Seiten) beschrieben wird:
 * Du kannst das Modul im ACP (Administrations-Bereich) verwalten
 * Du musst dich nicht um die Autorisation kümmern
 * Du hast freie Wahl bei der Navigationsstruktur
 * Das UCP / MCP / ACP Template enthält bereits Dinge wie pagination (Seitenzahlen), breadcrumbs (Navigations-Links - Brotkrumen) oder confirmation messages (Bestätigungsnachrichten)

Der Rest dieses Tutorials beschreibt, wie man ein MCP Modul (Moderator Kontroll Bereich - Moderations-Bereich) erstellt - wenn du ein UCP Modul (Benutzer Kontroll Bereich) erstellen möchtest, musst du in der Regel lediglich alle Vorkommen von "MCP" mit "UCP" ersetzen. Ein Beispiel für ein ACP-Modul findest du unten

Kurz Tutorial
Du musst, für ein funktionierendes Modul, lediglich zwei Dateien (plus die Template-Dateien) erstellen: . Diese Datei muss auch eine class (Klasse), die diesen Namen trägt, enthalten.
 * Die erste Datei gehört in das Verzeichnis includes/mcp/info und enthält Informationen wie Name des Modules, verfügbare Untermodi und benötigte Permissions (Berechtigungen). Für eine detaillierte Beschreibung siehe Mcp/info.
 * Die zweite Datei enthält den eigentlichen Code für das Modul. Diese Datei gehört in das Verzeichnis includes/mcp und muss den gleichen Namen, wie in der mcp/info - Datei definiert, tragen

class mcp_foo {	function main($id, $mode) {		$this->page_title = 'MCP_FOO'; $this->tpl_name = 'mcp_foo'; } }

Jetzt musst du nur noch die Template-Datei (mcp_foo.html) erstellen und bist bereit dein Modul Hinzuzufügen  (siehe install Modules bzw. Adding modules)  und dein Modul zu testen:

Hello, World!

Der gewählte mode (Modus) (definiert in der mcp/info - Datei) ist verfügbar im $mode - Parameter. Natürlich kannst du alle Funktionen (Template system, DBAL, etc.) die du von normalen phpBB-Seiten kennst verwenden. Dazu musst du Variablen wie $db oder $template globalisieren, da der Code nun innerhalb einer Funktion und nicht im globalen Rahmen ausgeführt wird. Hier ein erweitertes Beispiel:

class mcp_foo {	var $p_master;

function mcp_foo(&$p_master) {		$this->p_master = &$p_master; }

function main($id, $mode) {		global $template;

switch($mode) {			case 'index': $this->page_title = 'MCP_FOO_INDEX'; $this->tpl_name = 'mcp_foo_index'; $template->assign_var('GREETING', 'Hello, World!'); break;

case 'details': $this->page_title = 'MCP_FOO_DETAILS'; $this->tpl_name = 'mcp_foo_details';

//Display name of selected user $username = request_var('username', '', true); $template->assign_var('USERNAME', $username); break; }	} }

Wir haben hier also einen Konstruktor (constructor) mit $p_master als Parameter hinzugefügt. Diese Klasse (class) ist in der includes/functions_module.php definiert und enthält nützliche Informationen wie das aktuell ausgewählte Modul, seine Eltern und eine Liste aller Module.

Wenn du jetzt noch immer verwirrt bist, dann wirf einfach mal einen Blick auf bereits bestehende Klassen und versuche diese zu verstehen.

Main class - Hauptklasse
class acp_foo {  var $u_action; var $new_config; function main($id, $mode) {     global $db, $user, $auth, $template; global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx; switch($mode) {        case 'index': $this->page_title = 'ACP_FOO'; $this->tpl_name = 'acp_foo'; break; }

} }

Info Class - Info-Klasse
class acp_foo_info {   function module {       return array(            'filename'    => 'acp_foo',            'title'        => 'ACP_FOO',            'version'    => '1.2.3',            'modes'        => array( 'index'		=> array('title' => 'ACP_FOO_INDEX_TITLE', 'auth' => 'acl_a_foo_auth', 'cat' => array('')), ),       );    }

function install {   }

function uninstall {   } }

Language File - Sprachdatei
/** if (empty($lang) || !is_array($lang)) {	$lang = array; } // DEVELOPERS PLEASE NOTE // // All language files should use UTF-8 as their encoding and the files must not contain a BOM. // // Placeholders can now contain order information, e.g. instead of // 'Page %s of %s' you can (and should) write 'Page %1$s of %2$s', this allows // translators to re-order the output of data while ensuring it remains correct // // You do not need this where single placeholders are used, e.g. 'Message %d' is fine // equally where a string contains only two placeholders which are used to wrap text // in a url you again do not need to specify an order e.g., 'Click %sHERE%s' is fine
 * DO NOT CHANGE

$lang = array_merge($lang, array( 'ACP_FOO_INDEX_TITLE'						=> 'Foo Index', ));


 * Hinweis: :' Modul-Sprachdateien werden automatisch verwendet, sobald das Modul geladen wird. Dazu muss der Dateiname allerdings in der folgenden Weise formatiert sein: info_[acp|mcp|ucp|module type]_[module_name].php'', und die Datei muss sich im mods Verzeichnis befinden: language/de/mods/

Sample Style HTML - Beispiel Style HTML
Hello, World!

--Mahoney 00:30, 17 Feb 2011 (UTC)