Seite 1 von 1

mit { und } eine .php includen

Verfasst: 07.08.2006 01:35
von hibbert
Hi,
ich möchte gerne in einer Template Datei folgende Zeichen Verwenden:
{POS.1}
{POS.2}
usw.

Nun möchte ich gerne, dass bei {POS.1} eine bestimme .php Datei includet wird.

Der Benutzer hat über eine von mir definierte Seite die Möglichkeit {POS.1} eine beliebige Seite aus einer Auswahl zuzuweisen.

Ich hoffe mein Problem wurde verstanden und ich hoffe das mir wer weiterhelfen kann.

danke hibbert

Verfasst: 07.08.2006 01:45
von OnFire
Die einfachste Lösung wäre, wenn das Template als String eingelesen wird, ein preg_replace(), siehe: PHP-Manual.

so grob:

Code: Alles auswählen

$ergebnis = str_replace("\{pos1\}", "<? include($seite);  ?>", $template);
eval($ergebnis);
für Mehrere replacements müsste man dann noch etwas genauer ausarbeiten, eleganter geht das dann mit nempreg_replace ;) da hab ich um die Zeit aber keine Lust zu...versuch dich mal dran is ne schöne übung zu RegEx

Verfasst: 07.08.2006 01:57
von hibbert
hi,
vielleicht hätte ich sagen sollen, dass es es sich um die overall_header.tpl handelt.

Dein Verfahren kenne ich bis jetzt auch, aber nur, wenn ich eigene Templates verwende.
Geht das für die Templates vom phpBB genauso?

hibbert

Verfasst: 07.08.2006 02:04
von punkface
Hallo

Das phpBB 2.0.x Template-System erlaubt es Dateien einzubinden:
PHP-Code in der entsprechenden phpBB-Datei:

Code: Alles auswählen

$template->set_filenames(array('foo' => 'dateiname.ext'));
$template->assign_var_from_handle('BAR', 'foo');
Und dann könntest du in der entsprechenden Templatedatei mit {BAR} die Datei dateiname.ext einbinden.

Aber: Beim normalen phpBB 2.0.x wird PHP-Code in der eingebundenen Datei nicht geparst. Du könntest aber deine template.php (Backup machen!) mit der aus dem eXtreme Styles mod 2.x ersetzten, dann würde das gehen.

Die Frage ist aber, ob man anstatt die PHP-Dateien einzubinden, das Ganze nicht über das normale Templatesystem des phpBBs hingebekommt. Was bewirkt den der Code in den PHP-Dateien die du einbinden möchtest?

Verfasst: 07.08.2006 02:22
von hibbert
Hi,
sicherlich könnte ich das normale Template System verwenden, ich wollte nur wissen, ob es evtl auch anders geht, denn so müsste ich nicht alles umschreiben :wink:

Die Dateien zeigen eigentlich nur immer was an: Shoutbox, zufallsbilder, letzten Beiträge etc....

Gibt es irgendwo ein tut, wo man selber templates für phpBB erstellen kann bzw. wie ich Templates an anderen stellen in Templates einbinden kann, Beispiel:

in der overall_header.tpl soll an einer bestimmten stelle die shoutbox.tpl eingebunden werden. Dann ist dies nun mein neues ziel, da .php Dateien nicht übersetzt werden.

ich danke schonmal für die bisherige Hilfe.

hibbert

Verfasst: 07.08.2006 12:24
von punkface
hibbert hat geschrieben:in der overall_header.tpl soll an einer bestimmten stelle die shoutbox.tpl eingebunden werden. Dann ist dies nun mein neues ziel, da .php Dateien nicht übersetzt werden.
Also das reine einbinden der Datei geht wie schon erklärt ganz einfach:

page_header.php
suche

Code: Alles auswählen

//
// Parse and show the overall header.
//
davor einfügen

Code: Alles auswählen

$template->set_filenames(array('shoutbox' => 'shoutbox.tpl'));
$template->assign_var_from_handle('SHOUTBOX', 'shoutbox');
Und dann könntest du in der overall_header.tpl {SHOUTBOX} verwenden, um an der entsprechenden Stelle den Inhalt der shoutbox.tpl anzuzeigen.
(siehe dazu: KB:template_syntax)

Das hat so aber gar kein Sinn, denn die Platzhalter/Template-Variablen in der shoutbox.tpl würden gar nicht ersetzt, nein, diese würden sogar entfernt und nur der reine HTML-Code aus der shoutbox.tpl würde ausgegeben. Du musst also die Platzhalter noch durch den entsprechenden Inhalt ersetzten, sprich die shoutbox.tpl ordentlich parsen. Das könntest du der Übersicht in der page_header.php wegen einfach in einer Funktion machen, die du selbst z.B. in der functions.php definierst:

Code: Alles auswählen

function shoutbox()
{
	global $db, $template, $userdata, $lang, $phpEx /*, noch mehr Variablen die benötigt werden*/;
	
	// ganz viel Code
	// noch mehr Code
	// Datenbankabfragen und deren Verarbeitung
	// immernoch ganz viel Code
	
	$template->set_filenames(array(
		'shoutbox' => 'shoutbox.tpl')
	);
	$template->assign_vars(array(
		'L_PLATZHALTER' => $lang['blub'],
		// usw. 
		// usw.
		'U_LINK' => append_sid('datei.' . $phpEx)
	);
	$template->assign_var_from_handle('SHOUTBOX', 'shoutbox');
}
Und dann in der page_header.php anstatt

Code: Alles auswählen

$template->set_filenames(array('shoutbox' => 'shoutbox.tpl')); 
$template->assign_var_from_handle('SHOUTBOX', 'shoutbox');
einfach nur

Code: Alles auswählen

shoutbox();
schreiben.

Also Beispiel kannst du dir mal die Funktion make_jumpbox in der functions.php anschauen.

Du siehst, das Ganze ist schon etwas kompliziert, aber wenn du das so machen willst, würd ich dir dabei helfen.

Verfasst: 07.08.2006 14:58
von hibbert
Hi,
man ich danke dir !!

danach habe ich gesucht, eigentlich ist es super einfach :wink:

Ich benutze deinen zweiten Vorschlag, mit dem einfachen Aufruf:

Code: Alles auswählen

shoutbox();
alleringd benötige ich ja die Shoutbox an einem Dynamischen Platz wie {POS1}.
Das habe ich dann folgendermaßen gelöst:

Code: Alles auswählen

shoutbox(3);
und

Code: Alles auswählen

function shoutbox($platz)
{
   global $db, $template, $userdata, $lang, $phpEx /*, noch mehr Variablen die benötigt werden*/;

// ...

   $template->set_filenames(array(
      'shoutbox' => 'shoutbox.tpl')
// ...
   $template->assign_var_from_handle('POS'.$platz, 'shoutbox');
}
Jetzt habe ich mir genau das zusammengebastelt was ich brauche.

Vielen dank für deine Hilfe.

hibbert