PHP Code in overall_header.html

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
thommy1972de
Mitglied
Beiträge: 3
Registriert: 24.07.2018 18:07

PHP Code in overall_header.html

Beitrag von thommy1972de »

Hallo.

Ich habe in der Header 2 Boxen integriert in denen php Code ausgeführt werden soll.
Code in der overall_header.html:

Code: Alles auswählen

		
		<div id="page-middle-left">
			{BOX_LINKS}
		</div>
		<div id="page-middle-right">
			{BOX_RECHTS}
		</div>
Dann in der functions.php:

Code: Alles auswählen

'BOX_RECHTS'					=> include('box_right.php'),
aber den Text schreibt er irgendwo ganz links auf der Seite statt in der Box.
Wie bekomme ich den PHP Code in die Boxen ?
Benutzeravatar
Kirk
Supporter
Supporter
Beiträge: 7850
Registriert: 24.05.2010 08:31
Kontaktdaten:

Re: PHP Code in overall_header.html

Beitrag von Kirk »

Hallo
Deine Angaben sind etwas wage, wo (an welcher Stelle) hast du die Codes in den jeweiligen Dateien eingefügt und welche phpBB Version verwendest du?
Es währe ratsam nichts an den Core Dateien zu ändern und stattdessen sowas über eine Extension zu machen.
KB:ext_erstellen
Tuxman
Mitglied
Beiträge: 2284
Registriert: 24.05.2003 13:32
Kontaktdaten:

Re: PHP Code in overall_header.html

Beitrag von Tuxman »

include() funktioniert auch anders als du vermutlich denkst. ;)
tux. Ehemaliger Moderator ohne Sondertitel.
tuxproject.de
thommy1972de
Mitglied
Beiträge: 3
Registriert: 24.07.2018 18:07

Re: PHP Code in overall_header.html

Beitrag von thommy1972de »

Wie funktionert denn bei dir include ?

PHPBB Version 3.2.2
PHP Version 5.5.38

Dateien:
overall_header.html
include/functions,php
Benutzeravatar
oxpus
Ehemaliges Teammitglied
Beiträge: 5386
Registriert: 03.02.2003 12:33
Wohnort: Bad Wildungen
Kontaktdaten:

Re: PHP Code in overall_header.html

Beitrag von oxpus »

thommy1972de hat geschrieben:Wie funktionert denn bei dir include ?
Nun, include() bindet zunächst einmal die angegebene Datei in das aufrufende Script ein und fügt dabei dem aktuellen Programmablauf den Inhalt (= Programmcode) der eingebundenen Datei hinzu.
Die eingebundene Datei wird also dadurch soweit mit ausgeführt, als ob der Code beider Dateien in einem Stück vorliegen würde.
include() gibt im Umkehrschluss folglich nicht den Inhalt der eingebundenen Datei als "Text" an die aufrufende Datei zurück!

Ein "einfaches" 'BOX_RECHTS' => include('box_right.php'), reicht also in der Regel nicht aus, um Inhalte zu erzeugen, die zurückgeliefert und dann im aufrufenden Script weiter verarbeitet werden können.

Aber ich weiß jetzt auch nicht, was in deiner box_....php enthalten ist, um angezeigt zu werden.
Und sind denn überhaupt die Id's "page-middle-left" und "page-middle-right" bei dir mit den gewünschten CSS-Formatierungen versehen, dass der Inhalt der eingebundenen Dateien eben in die "Boxen" kommt und nicht außerhalb?
Grüße
OXPUS
Kein Support bei unaufgeforderten PNs, E-Mails oder auf anderem Weg!!
thommy1972de
Mitglied
Beiträge: 3
Registriert: 24.07.2018 18:07

Re: PHP Code in overall_header.html

Beitrag von thommy1972de »

Das stimmt soweit alles.
Wenn ich einfüge:

Code: Alles auswählen

'BOX_RECHTS' => '<h1>Test</h1>',
[ externes Bild ]

erscheint genau in meiner Box wo ich es haben will eben "Test"
Wenn ich aber

Code: Alles auswählen

<h1>Test</h1>
in eine PHP Datei Packe und includiere erscheint Test auch, allerdings an einer anderen Stelle

[ externes Bild ]

Ja, Links, Rechts vertauscht... egal :-)
Benutzeravatar
oxpus
Ehemaliges Teammitglied
Beiträge: 5386
Registriert: 03.02.2003 12:33
Wohnort: Bad Wildungen
Kontaktdaten:

Re: PHP Code in overall_header.html

Beitrag von oxpus »

Genau das hatte ich bereits beschrieben:

include() bindet zwar eine andere Datei ein, interpretiert aber dessen Inhalt dabei immer als ausführbaren PHP-Code und nicht als "Text"!!
Daher kannst du deine Methode so nicht anwenden, um den Inhalt der gedachten 2 Boxen auf der phpBB-Seite korrekt darzustellen.
Zwar kann man auch mit einem PHP-Script direkt HTML-Inhalte während dem Script anzeigen lassen (also "ausgeben"), was aber in Systemen wie dem phpBB besser dem integrierten Template-System überlassen werden sollte, um keine Layoutfehler zu erhalten, wie das bei dir nun der Fall ist.

Du solltest das include() der beiden Box-Dateien (man könnte letztlich auch eine Datei daraus machen mit den Inhalten beider Boxen) daher besser vor dem $template in der includes/functions.php für den Board-Kopf einfügen, also lediglich include('box_right.' . $phpEx), eintragen (mal phpBB-typisch korrigiert) und in den Box-Dateien dann diesen Aufbau verwenden (ich verzichte an dieser Stelle mal auf den phpBB-typischen Header für solche Dateien):

Code: Alles auswählen

$box_left = ''<h1>Test</h1>'; // oder was auch immer dort enthalten sein soll...
$template->assign_var('BOX_LINKS', $box_left);
Damit entfällt dann in der includes/functions.php die Zeile 'BOX_RECHTS' => include('box_right.php'),

Das Template-System des phpBB setzt dann letztlich alle Inhalte in Verbindung mit den angegebenen Template-Dateien zusammen und generiert die Seite.
Dabei ist es vollkommen egal, aus welcher PHP-Datei dafür die einzelnen Inhalte dazukommen, denn die Positionen der einzelnen Inhalte wird ja in den Template-Dateien über die betreffenden "Platzhalter" bestimmt. Somit ist es auch egal, ob die Box-Dateien am Anfang oder am Ende der Seite eingebunden werden, solange das aber immer vor dem Befehl zum Generieren der Seite geschieht (also in der Regel vor dem Aufruf der phpBB-Funktion page_footer()).

Mit deiner ursprünglichen Idee wird also der enthaltene HTML-Code der Box-Dateien als "Ausgabe" in einem Script interpretiert und dadurch genau an der Stelle auf der Seite angezeigt, wo die Box-Dateien eingebunden werden.
Also wie in deinem zweiten Screenshot zu sehen ist bereits vor dem eigentlichen phpBB-Seitenanfang.
Die Template-Token BOX_LINKS und BOX_RECHTS, die du mit den eingebundenen Box-Dateien "füttern" wolltest, bleiben daher schlichtweg leer, weil ja eben auf diese Weise nichts "zurück kommt".

Das ist eben der kleine, aber sehr entscheidende Unterschied...


BTW:
require() gibt es auch und arbeitet genau wie include(), erzeugt aber eine kritische Fehlermeldung, wenn die einzubindende Datei nicht gefunden wurde und stoppt somit den gesamten weiteren Ablauf.
Nur der Vollständigkeit halber hier mal mit erwähnt.
Grüße
OXPUS
Kein Support bei unaufgeforderten PNs, E-Mails oder auf anderem Weg!!
Antworten

Zurück zu „Coding & Technik“