Werte für ein phpBB-Template

Artikel, Anleitungen, Minikurse und Leitfaden für alle möglichen PC-Themen und PHP/phpBB.
Antworten
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Werte für ein phpBB-Template

Beitrag von oxpus »

Um Daten, die mit einem PHP-Script in einem phpBB erstellt werden, logisch darzustellen, sind mehrere Schritte nötig.
Als erstes wird ein Template in eine PHP-Datei eingebunden, das wie folgt dargestellt wird:

Code: Alles auswählen

$template->set_filenames(array(
'body' => 'templatedatei.tpl')
);
Damit wird dem phpBB-Parser (in der Datei template.php) mitgeteilt: Verwende für die Ausgaben dieses Script die Datei 'templatedatei.tpl' unter dem Namen 'body'.

Jetzt müssen aber auch die Werte benannt werden, die darzustellen sind.
Das geschieht für...

... einmalig darzustellende Werte/Texte:

Code: Alles auswählen

$template->assign_vars(array(
'L_TEXT_1' => $lang['Text_1'],
'WERT_1' => $wert_1,
'U_URL_1' => $u_url_1,
'S_KOMMANDO_1' => $s_command_1)
);
... wiederholende Werte/Texte für z.B. Tabellen:

Code: Alles auswählen

$template->assign_block_vars('blockname', array(
'L_TEXT_1' => $lang['Text_1'],
'WERT_1' => $wert_1,
'U_URL_1' => $u_url_1,
'S_KOMMANDO_1' => $s_command_1)
);
Und damit auch der Parser weiß, wohin diese Daten auf der Seite, bzw. im TPL-File darzustellen sind, werden dort Platzhalter in geschweiften Klammern eingesetzt.
Nach obigem Beispiel (mal ohne weitere Definitionen "drumherum"):

Code: Alles auswählen

{L_TEXT_1} {WERT_1} {S_KOMMANDO_1} {U_URL_1}
für eine mögliche Überschrift oder einen Kopf-/Fußbereich der Seite und eine Tabelle mit

Code: Alles auswählen

<!-- BEGIN blockname -->
{blockname.L_TEXT_1} {blockname.WERT_1} {blockname.S_KOMMANDO_1} {blockname.U_URL_1}
<!-- END blockname -->
Bei den Blöcken sind darüber hinaus auch Kombinationen/Hierarchien möglich, die im PHP-Script verschachtelte Blocknamen beinhalten und im TPL File dann durch mehrere Switches (im obigen Beispiel die HTML-Kommentare mit <!-- BEGIN ... --> und <!-- END ... -->) dargestellt werden.

Zuletzt muss dann die Seite auch wirklich dargestellt werden, denn bislang wurden nur Anweisungen und Werte bereitgestellt. Der Befehl dazu lautet:

Code: Alles auswählen

$template->pparse('body');
wobei 'body' der durch $template->set_filenames(); zugewiesene Name der Template-Datei ist.

Soll eine Seite in ein anderes Template eingebunden werden, so ist diese Seite mit

Code: Alles auswählen

$template->assign_var_from_handle('EINGEBETTETER_NAME', 'body');
abzuschliessen und im Ziel-Template der Platzhalter für das eingebettete Objekt (hier {EINGEBETTETER_NAME}) für das mit 'body' benannte Template an gewünschter Stelle einzutragen.
Zuletzt geändert von oxpus am Di 08.Nov, 2005 20:42, insgesamt 2-mal geändert.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Verschachtelte Blöcke

Beitrag von oxpus »

Wenn verschachtelte Blöcke nötig sind, also z. B. um einen Block anhand einer Bedingung ein-/ausschalten zu können und dennoch den Block dann anhand einer 2. Bedingung zu steuern, muss im Script und im Template das angegeben werden.

Im Template kann z. B. folgendes passieren:

Code: Alles auswählen

if ($userdata['session_logged_id']) // User angemeldet?
{
     $template->assign_block_vars('user_logged_in', array());

     if ($board_config['config_value'] == TRUE)
     {
          $template->assign_block_vars('user_logged_in.config_block', array(
               'TEXT' => $text)
          );
     }
     else
     {
          $template->assign_block_vars('user_logged_in.config_nothing', array(
               'TEXT2' => $text2)
          );
     }
}
Damit würde einer der beiden Texte nur dann an das Template übergeben, wenn der User angemeldet ist.
Im Template muss dann diese Verschachteltung wie folgt aufgelöst werden:

Code: Alles auswählen

<!-- BEGIN user_logged_in -->
<!-- BEGIN config_block -->
{user_logged_in.config_block.TEXT}
<!-- END config_block -->
<!-- BEGIN config_nothing -->
{user_logged_in.config_nothing.TEXT2}
<!-- END config_nothing -->
<!-- END user_logged_in -->
Einwände, daß man dieses Beispiel auch anders darstellen kann, sind hierbei aussen vor, es geht nur um das Prinzip.
Wie man hier sieht, wird ein "äusserer" und ein "innerer" Switch erzeugt, die voneinander abhängig sind.
In Templates wie der index_body.tpl ist das mit den Kategorien (catrow) und Foren (forumrow) z. B. so gemacht, um eben jeder Kategorie die richtigen Foren zuzuordnen.
Auch lassen sich hiermit weitere Ebenen einbinden, je mehr, desto unübersichtlicher und langsamer wird jedoch der Code und die Seite.
Beachtet werden muss jedoch immer, daß die richtige Reihenfolge der Switcheinträge im Template beachtet wird, sonst gibt es eine Fehlermeldung betreffend der template.php, die zunächst auf die falsche Fährte locken.

Merke:
Die template.php gibt nur Fehler aus, wenn tpl.Dateien nicht gefunden oder Switche nicht korrekt erstellt wurden!
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Antworten