phpBB

Development Wiki

Deutsch:Vorlage für in phpBB3 eingebundene Seiten

From phpBB Development Wiki


Dieses ist eine Vorlage für eine Seite, die man ins phpBB-Verzeichnis legen kann und in der dann automatisch der Header/Footer sowie die Login-Daten verfügbar sind.

Jede für phpBB3 erstellte Seite benötigt 3 Teile


  1. neueseite.php -- Dies ist die PHP Seite, die ein Besucher aufrufen wird, wie z.B. : http://meine-seite.de/neueseite.php. Diese Datei wird den Hauptteil des PHP/Script beinhalten und die Seite im phpBB3 Framework darzustellen.

  2. /phpBB3/language/<lang>/mods/meine_sprach_datei.php -- Dies ist Deine PHP Sprach Datei welche alle Deine Sprachvariablen beinhaltet.

  3. /phpBB3/styles/<style>/template/mein_template.html -- Dies ist Deine HTML Template Datei welche alle Template Variablen und HTML beinhaltet um die Seite, die der Besucher aufruft, darzustellen.


Schritt 1: Erstellen der PHP Datei

Speichere diese Datei in dem Foren Hauptordner ab ( dort wo z.B. die Datei memberlist.php liegt ) und nenne sie: neueseite.php.

<?php
/**
*
* @author Original Autor Benutzername autor_email@domain.de - http://meine-seite.de
* @author Anderer Autor Benutzername andere_email@domain.de - http://domain.de
*
* @package {PACKAGENAME}
* @version $Id$
* @copyright (c) 2007 Dein Gruppen Name
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/

/**
* @ignore
*/
// Benötigte Dateien und Variablen von phpBB 
define('IN_PHPBB'true);
$phpbb_root_path './';
$phpEx substr(strrchr(__FILE__'.'), 1);
include(
$phpbb_root_path 'common.' $phpEx);

// Da wir weiter unten noch einen Avatar anzeigen lassen wollen,
// benötigen wir noch die dazu passende Funktion 
// die in der Datein includes/functions_display.php vorhanden ist.
include($phpbb_root_path 'includes/functions_display.' $phpEx);

// Session auslesen und Benutzer-Informationen laden
$user->session_begin();  // Session auslesen
$auth->acl($user->data); // Benutzer-Informationen laden
$user->setup('mods/meine_sprach_datei'); // Sprachvariablen aus eigener Sprach Datei laden

/*
* Nun folgt erst Dein PHP Code für die neue Seite, also:
* Variablen setzen, Datenbankabfragen, Einfügen und Entfernen von Einträgen usw...
*
* Dies ist nun ein sehr primitives Beispiel. 
* Es soll nur veranschaulichen wie es funktioniert.
*
*/
$example_variable sprintf($user->lang['TIME_NOW'], $user->format_date(time()));
$google_logo '<a href="http://www.google.com/"><img src="http://www.google.com/intl/en_ALL/images/logo.gif" alt="Google" /></a>';

// Ein typischer Gebrauch um Variablen an das Template zu senden.
$template->assign_vars(array(
    
'EXAMPLE_VAR'    => $example_variable,
    
'GOOGLE_LOGO'    => $google_logo,
    
'MY_AVATAR'        => get_user_avatar($user->data['user_avatar'], $user->data['user_avatar_type'], $user->data['user_avatar_width'], $user->data['user_avatar_height']),
));

/*
 * Nun weisen wir ein paar statische Daten einem Array zu.
 * Alle Sprachvariablen werden normalerweise in der Sprach Datei zugewiesen,
 * dies dient hier nur zur DEMONSTRATION.
 */
$some_array = array(
    array(
        
'beispiel'        => 'Nur ein Beispiel 1',
        
'demonstration'    => 'Etwas zum zeigen',
    ),
    array(
        
'beispiel'        => 'Nur ein Beispiel 1',
        
'demonstration'    => 'schon wieder etwas zum zeigen',
    ),
);

/*
 * Standard Beispiel um eine Block Variable fuer das Template zu fuellen.
 * Dies wird Dir ermöglichen einen Block oder ein Array im Template darzustellen
 * Dies ist nützlich um SQL Abfragen aus der Datenbank in das Template zu überführen.
 */
foreach ($some_array as $row)
{
    
$template->assign_block_vars('block_name', array(
        
'EXAMPLE'        => $row['beispiel'],
        
'DEMO'            => $row['demonstration'],
    ));
}

// Seiten Titel, diese Sprach Variable sollte in der Sprach Datei, 
// welche weiter oben genannt wurde, definiert sein.
page_header($user->lang['MEIN_TITEL']);

// Defniere nun den Dateinamen Deines Templates welches Du benutzen moechtest.
// Dies ist der Name von Deinem Template welches unter /styles/<style>/templates/ zu finden ist.
$template->set_filenames(array(
    
'body' => 'mein_template.html',
));

// Script vervollständigen und Seite anzeigen lassen.
page_footer();

?>

Schritt 2: Erstellen der Sprach Datei

Speichere diese Datei im Sprach Verzeichnis unter folgendem Pfad:
/phpBB3/language/<lang>/mods/meine_sprach_datei.php.

Beachtet bitte, das Sprach Dateien im UTF-8 ohne BOM Format abgespeichert werden müssen!

<?php
/**
*
* groups [German]
*
* @author Mein Benutzername email@domain.de - http://meine-seite.de
*
* @package language
* @version $Id$
* @copyright (c) 2007 Deine Gruppe
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/

/**
* DO NOT CHANGE
*/
if (!defined('IN_PHPBB'))
{
    exit;
}

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(
    
'EXAMPLE'        => 'Beispiel',
    
'DEMO'            => 'Demo',
    
'TIME_NOW'        => 'Die aktuelle Zeit lautet %s',
    
'MEIN_TITEL'    => 'Meine neuer Seiten Titel',
));

?>

Schritt 3: Erstellen der eigenen Template Datei

Speichere diese Datei im Template Verzeichnis des Styles welches Du verwendest unter folgendem Pfad:
/phpBB3/styles/<style>/template/mein_template.html.

<!-- INCLUDE overall_header.html -->

<
div>{MY_AVATAR}</div>
<
div>{EXAMPLE_VAR}</div>
<
div>{GOOGLE_LOGO}</div>

<
table class="table1" cellspacing="1">
    <
tr>
        <
th>{L_EXAMPLE}</th>
        <
th>{L_DEMO}</th>
    </
tr>
    <!-- 
BEGIN block_name -->
    <
tr class="<!-- IF block_name.S_ROW_COUNT is even -->bg1<!-- ELSE -->bg2<!-- ENDIF -->">
        <
td>{block_name.EXAMPLE}</td>
        <
td>{block_name.DEMO}</td>
    </
tr>
    <!-- 
END block_name -->
</
table>

<!-- INCLUDE 
overall_footer.html -->

Schritt 4: Navigiere zu Deiner neuen Seite

Wenn Du fertig bist, rufe Deine neue Seite mit Deinem Browser auf, z.B.: http://deine-seite.de/neueseite.php
Nun kannst Du Deine neue Seite weiter anpassen bis sie Dir gefaellt.

Anmerkungen
  • $phpbb_root_path: Wenn die Datei in einem anderen Verzeichnis als phpBB liegt, hier den relativen Pfad zu phpBB mit abschliessendem Slash (/) eintragen. Eventuell muss dazu der Cookie-Pfad im ACP auf / gesetzt werden.
  • $phpEx: Um Probleme mit den Datei-Endungen zu umgehen und Fehlermeldungen zu vermeiden, ist es ratsam, für eure php-Datei die gleiche Endung zu verwenden die die index.*** im Root-Verzeichnis besitzt. (bei index.php: neueseite.php, bei index.php5 => neueseite.php5)
  • PAGE_INDEX: Wenn du möchtest, daß deine Seite mit Titel und Link in der "Wer ist Online"-Liste aufgeführt wird, musst du wie folgt vorgehen:
    In der viewonline.php ab Zeile 312 suchen:
    case 'report':
    			$location = $user->lang['REPORTING_POST'];
    			$location_url = append_sid("{$phpbb_root_path}index.$phpEx");
    		break;
    
    Danach einfügen:
    case 'neueseite':
    

    $location = 'Betrachtet "Eure Seite"'; $location_url = append_sid("{$phpbb_root_path}neueseite.$phpEx"); break;

    Wichtig: zu: case 'neueseite': in diesem Fall heißt die Seite, die ihr erstellen wollt: "neueseite.php". Ändert den Code also entsprechend ab (z.B. bei "teampage.php": case 'teampage')

    Entsprechend dazu müsst ihr $location_url = append_sid("{$phpbb_root_path}neueseite.$phpEx"); ebenfalls abändern.

  • $user->data: Über den Aufruf des User-Objekts hast man u.a. Zugriff auf alle Felder der User-Tabelle eines angemeldeten Users oder eines Gasts.
  • Inhaltsbereich: Hier kannst du beliebigen php-Code verwenden.
  • Templatedatei: Durch
    $template->set_filenames(array(
       'body' => 'mein_template.html')
    ); 
    gebt ihr den Dateiname der Datei an, die den Inhalt der eingebundenen Datei enthält. Diese Datei muss im Verzeichnis /styles/euerStyle/ liegen. Um den Header einzubinden, muss diese Datei Am Anfang den Code
    <!-- INCLUDE overall_header.html -->
    enthalten. Um den Footer einzubinden, muss am Ende der Datei folgendes eingfügt werden:
    <!-- INCLUDE overall_footer.html -->
Prüfung der Benutzerrechte
  • Soll geprüft werden, ob ein Benutzer angemeldet ist, so ist $user->data['user_id'] zu prüfen. Also z.B.
    if ($user->data['user_id'] == ANONYMOUS)
    {
    // Code, wenn Benutzer nicht angemeldet ist
    }
    else
    {
    // Code, wenn Benutzer angemeldet ist
    }

  • Mit diesem Code kannst du nicht eingelogte Benutzer auf die Login-Seite umleiten:
    if ($user->data['user_id'] == ANONYMOUS)
    {
    	login_box();
    }

  • Weiterhin kann so geprüft werden, ob ein User Admin-Rechte hat:
    if ($auth->acl_get('a_'))
    {
    }

    Entsprechendes gild für Moderatoren-Rechte:

    if ($auth->acl_getf_global('m_'))
    {
    }

    Die Prüfung, ob ein User Admin oder Moderator ist, erfolgt folgendermaßen:
    if ($auth->acl_get('a_') || $auth->acl_getf_global('m_'))
    {
    }

Weitergabe der Sitzungsdaten

Damit die Sitzungsdaten zwischen den einzelnen Seitenaufrufen erhalten bleiben, speichert phpBB die ID der Sitzung in einem Cookie. Falls kein Cookie verwendet werden kann, wird die ID über die URL (&sid=...) weitergegeben. Damit diese Sitzungs-ID ggf. an die URL angehangen wird, gibt es die Funktion append_sid(), die als Parameter die URL der Seite aufnimmt. So sollte z.B. statt
<a href="index.php">Zum Forum</a>
besser
<a href="<?php append_sid('index.php'); ?>">Zum Forum</a>
verwendet werden, wenn von einer Seite mit dieser Vorlage auf eine Foren-Seite oder auf eine andere Seite mit dieser Vorlage verwiesen wird.


Userabhängiger Text

  • Um userabhängigen Text zu schreiben muss man lediglich in der html-Datei folgendes
    <!-- IF not S_IS_BOT and S_USER_LOGGED_IN -->
    über den User-Text schreiben. Danach muss man
    <!-- ENDIF -->
    schreiben.

  • Über den Gast-Text muss man
    <!-- IF not S_USER_LOGGED_IN or S_IS_BOT -->
    schreiben. Natürlich auch dort wieder mit
    <!-- ENDIF -->
    abschließen.