phpBB's template.php findet eine .tpl-Datei nicht...

PHP, Ajax, CSS, HTML, Javascript
Eben für die wirklich Harten, die alles selber machen.
Antworten
Benutzeravatar
Zyancali
Beiträge: 51
Registriert: So 13.Nov, 2005 11:11
Wohnort: ?sterreich/Stmk/Wolfsberg
Kontaktdaten:

phpBB's template.php findet eine .tpl-Datei nicht...

Beitrag von Zyancali »

Hi!

Ich verwende das Session-, das BBCode- und das Templatesystem aus phpBB.
Dazu verwende alle Funkiotnen aus der phpBB-functions.php bis auf get_db_stats().

Weiters benutze ich anstatt $board_config die Vari $system
und anstatt $phpbb_root_path die vari $root_path.

Alles ist dementsprechend ersetzt.

Beim Start binde ich sie wie folgt, ein:

Code: Alles auswählen

//
// Load Template system
//
include($root_path . 'includes/template.' . $phpEx);
$TEMPLATE_PATH = $root_path . 'template';
$template = new Template($TEMPLATE_PATH);
Wie ersichtlich, liegen alle .tpl-Dateien im ./template/ Verzeichnis,
ob sie für den Admin sind oder nicht spielt keine Rolle...

Bei allen anderen Dateien funktioniert das einbinden, ob es nun meine
index.php, die includes/page_header.php oder sonst eine Datei ist...

Jetzt habe ich die admincp.php im Rootverzeichnis, diese includet eine
Datei ein (Name per GET - Prüfung auf PHP-Befehle & Co), die im ./admin/ Verzeichnis liegt...

Die Datei nennt sich WhoIsOnline.php und
will die ./template/who_is_online.tpl...

Jetzt kommt beim Aufruf folgendes:
  1. Abarbeitung der page_header.php
  2. Fehler der template.php: Template->make_filename(): Error - file not exist
Jetzt frage ich mich nur warum dieser tolle Fehler kommt...

Ich habe die Entsprechenden Dateien mal angehängt
Dateianhänge
fileman.zip
Die Dateien... mit Verzeichnissstruktur
(29.16 KiB) 428-mal heruntergeladen
Fatal error: Maximum execution time of 30 seconds exceeded in /usr/web/root/oxpusweb/viewtopic.php on line 45
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Eben weil Du die Tempaltes alle zusammen in einem Verzeichnis hast, erwartet die template.php dennoch die Admin-Dateien diese an anderer Stelle, wenn includiert wird.
Der Pfad in $root_path muss dahher angepasst werden und eben IMMER auf den Script-Root Pfad verweisen!
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
Zyancali
Beiträge: 51
Registriert: So 13.Nov, 2005 11:11
Wohnort: ?sterreich/Stmk/Wolfsberg
Kontaktdaten:

Beitrag von Zyancali »

Dann frage ich mir nur, warum es bei
./admin/TestTemplate.php funktioniert...
Fatal error: Maximum execution time of 30 seconds exceeded in /usr/web/root/oxpusweb/viewtopic.php on line 45
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Die Dateien, die eingebunden werden, sind doch auch einem anderen Pfad. Und dort must Du dafür sorgen, daß auch die Templates korrekt herangezogen werden...
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
Zyancali
Beiträge: 51
Registriert: So 13.Nov, 2005 11:11
Wohnort: ?sterreich/Stmk/Wolfsberg
Kontaktdaten:

Beitrag von Zyancali »

Hmm...
Nach einer kleinen Fehlersuche von "Hat die template.php was gegen Dateinamen?"
bis zum Dateiinhalt, habe ich Folgendes festgestellt:

Alle Dateien, die im ./admin/ Verzeichnis liegen und kleiner
als ca. 5 KB sind, funktionieren ganz normal.
Alle größeren bewegen die template.php dazu,
einen Fehler zu erzeugen...

¢¦
Fatal error: Maximum execution time of 30 seconds exceeded in /usr/web/root/oxpusweb/viewtopic.php on line 45
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Sowas wäre mir komplett neu...
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
Zyancali
Beiträge: 51
Registriert: So 13.Nov, 2005 11:11
Wohnort: ?sterreich/Stmk/Wolfsberg
Kontaktdaten:

Beitrag von Zyancali »

Mir gehts da nicht anders... ^2
Ich glaub ich werd mal eine andere Template-Engine
wie Smarty ausprobieren...

Das störische dort sind die vielen Dateien...

Na Gut...
Fatal error: Maximum execution time of 30 seconds exceeded in /usr/web/root/oxpusweb/viewtopic.php on line 45
Benutzeravatar
Sonic2007
Beiträge: 46
Registriert: Mi 17.Mai, 2006 19:50

Beitrag von Sonic2007 »

Ich hab da ne ähnliche Frage. In phpBB gibt es ja diese Switches, die per 'assign_block_vars('') erstellt werden. Wie funktioniert das? Was und wie erstellt die Funktion 'assign_block_vars('')' diese blöcke und wie werden die dann im template umgewandelt?

2.: Wie bringe ich eine .tpl dazu, alle Variablen, die un diesen: { } klammern eingebunden sind, auszugeben, anstatt einfach diese klammern auszugeben und darin halt das, was ich in der tpl als Variable eingegeben habe?
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

1. assign_block_vars wird mit dem Switchnamen ausgegeben, der dann in der TPL-Datei stehen muss. Die template.php ersetzt dann, sofern dieser so definierte Block vorhanden ist, alle darin enthaltenen Platzhalter mit den angegebenen Werten. Dabei wird diese Prozedur solange wiederholt, wie dieser Switch angegeben wurde, also wie eine Schleife oder ein Array.
Erhält die template.php nun aber keine Werte zu einem Switch, wird dieser komplett entfernt und damit schlicht nicht angezeigt.

2. ??? Die Klammern und deren Inhalte sind Platzhalter für die gleichlautenden Werte, die der template.php übergeben werden. Die Klammern wurden definiert, um die Variablenamen vom restlichen Code und/oder Text abzugrenzen. Somit wird komplett beides ersetzt.
Es ist aber ungleich schwerer und langsamer, eine im Template eingetragene Variable zu erkennen (auch mit diesem Klammern) und dann mögliche vorhandene Werte dafür einzutragen.

Also:
Aktuell bekommt die template.php per Array einen Block an Daten, der gleichlautend den Platzhaltern im Template als jeweiliger Array-Key angegeben ist. Somit werden alle Keys aus dem Array ausgelesen und, sofern eben per preg_match-Funktion auffindbar, im Template-File ersetzt.
Würdest Du nun hier Variablen einfügen, wüsste ja zunächst die template.php nicht, ob dort ein Array oder eine einfache Variable einzusetzen ist.
Und dazu muss auch erst geprüft werden, ob die Variable überhaupt gefüllt ist, also einen Wert enthält.
Dabei müsste man aber der template.php alle diese Werte übergeben und das mit dem gleichlautenden Namen, also per gobal für die Funktion assign_vars und das ist nicht gerade eine sichere (im Sinne von Sicherheit!) Angelegenheit.

Drum:
Besser Platzhalter im Template angeben und diese dann ersetzen lassen. Nicht irgendwelche Variablen, die dann erst gesucht werden müssen.
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
Sonic2007
Beiträge: 46
Registriert: Mi 17.Mai, 2006 19:50

Beitrag von Sonic2007 »

Und wie finde ich mit preg_match diese Platzhalter und lese damit den code aus, der in dem array ist?
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

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
Sonic2007
Beiträge: 46
Registriert: Mi 17.Mai, 2006 19:50

Beitrag von Sonic2007 »

Die kenn ich. Aber wie lese ich dann mit preg_match_all()
die Variablen aus, ie nach dem <!-- BEGIN oder nach dem <!-- END stehen?
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

In dem Du mittels regulärer Ausdrücke eben genau die Stellen findest.
Ist mühsam sowas zu erstellen, daher ist auch die template.php nicht leicht zu verstehen ;)
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
Sonic2007
Beiträge: 46
Registriert: Mi 17.Mai, 2006 19:50

Beitrag von Sonic2007 »

Also:
Ich hab folgendes: [<][!][-][-][][E][G][N]
klappt das?
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Ui, nein, wenn dann
'#<!-- BEGIN (.*?) -->#'
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
Sonic2007
Beiträge: 46
Registriert: Mi 17.Mai, 2006 19:50

Beitrag von Sonic2007 »

Was bringt das (.*)
?
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Damit wird eine Untermenge erstellt.
preg_match liefert dann für jede Untermenge ein Ergebnis, daß sich in ein Array speichern lässt.
Somit kannst Du eben genau alles, was nach BEGIN und --> steht herausfinden.
Allerdings nur, wenn die Untermenge auch wie von mit genannt angegeben wird!
Also (.*?) und nicht (.*)!
Zuletzt geändert von oxpus am So 28.Mai, 2006 19:35, insgesamt 1-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
Sonic2007
Beiträge: 46
Registriert: Mi 17.Mai, 2006 19:50

Beitrag von Sonic2007 »

oh. Hab ich dich glatt das ? vergessen ;)
Ich schau mir das noch mal an
Benutzeravatar
Sonic2007
Beiträge: 46
Registriert: Mi 17.Mai, 2006 19:50

Beitrag von Sonic2007 »

Wie speichert man diese Untermenge in einem Array?
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Na, das macht doch schon preg_match selbst.
Du musst dabei nur als 3. Parameter ein Array angeben, bzw. einen Variablennamen, in dem dann das Ergebnis als Array gespeichert wird.
Dabei ist $array[0] die erste Untermenge, $array[1] die 2. Untermenge, ... $array[0][0] das erste Ergebnis der ersten Untermenge.
Usw...
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