Vorlage für in phpBB eingebundene Seiten in phpBB3

In diesem Forum kann man Fragen zur Programmierung stellen, die bei der Entwicklung von Mods für phpBB 3.0.x oder dem Modifizieren des eigenen Forums auftauchen.
Forumsregeln
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Benutzeravatar
Stefane
Mitglied
Beiträge: 784
Registriert: 04.02.2006 22:43
Wohnort: Rathenow
Kontaktdaten:

Vorlage für in phpBB eingebundene Seiten in phpBB3

Beitrag von Stefane »

In Anlehnung an Vorlage für in phpBB eingebundene Seiten für phpBB2, hier das entsprechende für phpBB3:

Vorlage für in phpBB eingebundene Seiten

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.

Code: Alles auswählen

<?php

// 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);

// Session auslesen und Benutzer-Informationen laden
$user->session_begin();
$user->setup();
$auth->acl($user->data);

/*
* Inhaltsbereich
*/

// Header und Titel der Seite
page_header('TITEL DER SEITE');

// Angabe eurer Content-Seite
$template->set_filenames(array(
	'body' => 'eure_seite.html')
);

// Footer
page_footer();

?>
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: eure_seite.php, bei index.php5 => eure_seite.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:

    Code: Alles auswählen

    case 'report':
    			$location = $user->lang['REPORTING_POST'];
    			$location_url = append_sid("{$phpbb_root_path}index.$phpEx");
    		break;
    
    Danach einfügen:

    Code: Alles auswählen

    case 'eure_seite':
    			$location = 'Betrachtet "Eure Seite"';
    			$location_url = append_sid("{$phpbb_root_path}eure_seite.$phpEx");
    		break;
    
    Wichtig: zu: case 'eure_seite': in diesem Fall heißt die Seite, die ihr erstellen wollt: "eure_seite.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}eure_seite.$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

    Code: Alles auswählen

    $template->set_filenames(array(
       'body' => 'eure_seite.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

    Code: Alles auswählen

    <!-- INCLUDE overall_header.html -->
    enthalten. Um den Footer einzubinden, muss am Ende der Datei folgendes eingfügt werden:

    Code: Alles auswählen

    <!-- 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.

    Code: Alles auswählen

    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:

    Code: Alles auswählen

    if ($user->data['user_id'] == ANONYMOUS)
    {
    	login_box();
    }
  • Weiterhin kann so geprüft werden, ob ein User Admin-Rechte hat:

    Code: Alles auswählen

    if ($auth->acl_get('a_'))
    {
    }
    Entsprechendes gild für Moderatoren-Rechte:

    Code: Alles auswählen

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

    Code: Alles auswählen

    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

Code: Alles auswählen

<a href="index.php">Zum Forum</a>
besser

Code: Alles auswählen

<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.
Zuletzt geändert von Stefane am 08.06.2007 10:36, insgesamt 3-mal geändert.
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Beitrag von Miriam »

Danke für die Infos.

Da habe ich allerdings (im Moment) 2 Fragen zu:

1.)
  • Code: Alles auswählen

    define('IN_PHPBB', true);
    $phpbb_root_path = './';
    $phpEx = substr(strrchr(__FILE__, '.'), 1);
    include($phpbb_root_path . 'common.' . $phpEx); 
    Wieso wird die Endung für die common.php aus der Endung der aufgerufenen PHP Datei abgeleitet?
    Wenn ich nun aus Jux und Dollerei meine selbstgebaute Datei jux.php5 nenne ist vorbei mit include();
2.)
  • Die Prüfung, ob ein User Admin oder Moderator ist, erfolgt folgendermaßen:
    Code:

    Code: Alles auswählen

    if ($auth->acl_getf_global('m_') || $auth->acl_getf_global('m_'))
    {
    }
    Also in diesem speziellen Fall Moderator ODER Moderator?
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Benutzeravatar
TheRenegate
Mitglied
Beiträge: 367
Registriert: 07.06.2006 12:01
Wohnort: Ansbach
Kontaktdaten:

Beitrag von TheRenegate »

Miriam hat geschrieben:
  • Die Prüfung, ob ein User Admin oder Moderator ist, erfolgt folgendermaßen:

    Code: Alles auswählen

    if ($auth->acl_getf_global('m_') || $auth->acl_getf_global('m_'))
    {
    }
    Also in diesem speziellen Fall Moderator ODER Moderator?
Ich denke er meint

Code: Alles auswählen

if ($auth->acl_get('a_')) || $auth->acl_getf_global('m_'))
{
}
;)
Benutzeravatar
Stefane
Mitglied
Beiträge: 784
Registriert: 04.02.2006 22:43
Wohnort: Rathenow
Kontaktdaten:

Beitrag von Stefane »

nabend,

@Miriam:
zu 1. Da hast du leider volle kanne Recht. Doch standardmäßig ist für die Inklution das in der Datei so vorgesehen... und so findste das auch in jeder Datei von phpBB3. Natürlich enden die alle auf .php... Und um phpBB-konform zu bleiben, isses vlt auch sinnvoll, die Datei-Endung gemäß der anderen (oft .php) zu belassen, was auch sinvoll ist, denn $phpEx wird ja, wenn du die Datei erweiterst, sicher auch noch an anderen Stellen verwendet!
Oder sehe ich da was falsch? Ich lasse mich gerne belehren!

zu 2. Das war ein einfacher copy/paste-Fehler...hab auf den letzten Metern geschlafen... -.- So, wie es TheRenegate gepostet hat, isses natürlich richtig! Ich habs geändert.[/code]
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Beitrag von Miriam »

Zu 1. muss ich vllt noch sagen, dass ich nicht nur gefragt habe, um Dich zu ärgern (das natürlich auch), sondern weil einige Webhoster das Feature (oder ist es doch ein Bug (?)) bieten, die verwendete PHP Version auf demselbem Webspace per Datei-Suffix auszuwählen.

Und wenn ein ambitionierter User nun sagt: Toll, dass ich die Vorlage habe...und das Ganze mache ich auch gleich für PHP5.x. Also Endung .php5 an das Script gehängt.... fertig.

Und schon folgt das Posting auf dem Fusse. :D

Aber alles in allem: Sehr schön.

Und zu 2.:
Stefane hat geschrieben:...hab auf den letzten Metern geschlafen... -.- So, wie es TheRenegate gepostet hat, isses natürlich richtig! Ich habs geändert.[/code]
IC.
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
BB-BF-BM
Mitglied
Beiträge: 2179
Registriert: 28.10.2005 16:38
Wohnort: Essen

Beitrag von BB-BF-BM »

Code: Alles auswählen

/*
* Inhaltsbereich
/*
besser wäre

Code: Alles auswählen

/*
* Inhaltsbereich
*/
:wink:
Benutzeravatar
Stefane
Mitglied
Beiträge: 784
Registriert: 04.02.2006 22:43
Wohnort: Rathenow
Kontaktdaten:

Beitrag von Stefane »

moinmoin,
muss ich vllt noch sagen, dass ich nicht nur gefragt habe, um Dich zu ärgern (das natürlich auch), sondern weil einige Webhoster das Feature (oder ist es doch ein Bug (?)) bieten, die verwendete PHP Version auf demselbem Webspace per Datei-Suffix auszuwählen.
Dieser Fehler hätte dir genauso auch bei phpBB2 passieren können, da dort das Suffix ja auch als Konstante in der extensions.inc festgelegt ist. Und wenn das Suffix einheitlich anhegängt wird, dann betrifft es nicht nur die eine Datei, sondern alle und dann würde es ja wieder passen. Dafür wurde das ganze da, denke ich mal erfunden ;-)
Und wenn ein ambitionierter User nun sagt: Toll, dass ich die Vorlage habe...und das Ganze mache ich auch gleich für PHP5.x. Also Endung .php5 an das Script gehängt.... fertig.
Das wird dann natürlich ein Problem, haben wir ja schon erläutert...
Was wäre ein Lösungsansatz?
Vlt Folgendes:

Code: Alles auswählen

// Benötigte Dateien und Variablen von phpBB
define('IN_PHPBB', true);
$phpbb_root_path = './';
$phpEx = "php";
include($phpbb_root_path . 'common.' . $phpEx);
Entsprechend muss dann auch das angepasst werden. Der User gibt also hier gleich den kompletten Dateinamen an:

Code: Alles auswählen

case 'eure_seite':
         $location = 'Betrachtet "Eure Seite"';
         $location_url = append_sid("{$phpbb_root_path}eure_seite.php5");
      break; 
Ich denke aber, dass das zu mehr Verwirrung führen würde und aufwändiger und "weniger" phpBB-like ist, als dass ich einfach einen Zusatz schreibe:
  • $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: eure_seite.php, bei index.php5 => eure_seite.php5)
So kann man das an ehesten unkompliziert und eindeutig unterbinden.

Oder hast du noch eine andere Idee?
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Beitrag von Miriam »

Also ich fand die zentrale Definition der Endung ganz okay. :grin:
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Benutzeravatar
Stefane
Mitglied
Beiträge: 784
Registriert: 04.02.2006 22:43
Wohnort: Rathenow
Kontaktdaten:

Beitrag von Stefane »

@BB-BF-BM: Danke ... ist ausgebessert

@Miriam: Tja leider kann ich daran, dass die Endung nun nicht mehr zentral gemanaged wird nichts ändern. Ich hab mir das nicht ausgedacht. Deshalb hab ich jetzt einfach mal meinen Zusatz von oben mit reingenommen. Das sollte nun auch alle restlichen Unklarheiten beseitigen.

Danke für eure Mithilfe!
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Beitrag von Miriam »

Keine Ursache. :)
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Antworten

Zurück zu „[3.0.x] Mod Bastelstube“