phpBB

Development Wiki

Deutsch:Erstellen von Modulen

From phpBB Development Wiki

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:

  • 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

('filename' => 'mcp_foo'). Diese Datei muss auch eine class (Klasse), die diesen Namen trägt, enthalten.

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:

<!-- INCLUDE mcp_header.html -->

Hello, World!

<!-- INCLUDE mcp_footer.html -->

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.

Beispiel ACP Modul

Main class - Hauptklasse

includes/acp/acp_foo.php

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

includes/acp/info/acp_foo.php

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

language/de/mods/info_acp_foo.php

/**
* DO NOT CHANGE
*/
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

$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

adm/style/acp_foo.html

<!-- INCLUDE overall_header.html -->

Hello, World!

<!-- INCLUDE overall_footer.html -->


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