Hallo, Gast! (Registrieren)

Letzte Ankündigung: Sicherheitsupdate: MyBB 1.8.24 veröffentlicht (09.08.20)


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste
Mit PHP-Datei in Unterverzeichnis eigenes Template aufrufen
#1
Hallo,

A) Standardlösung um eine eigenes Template aufzurufen ist:
1. Template "muster" anlegen
2. Datei  ./dateiname.php mit Inhalt anlegen:
PHP-Code:
<?php
define
("IN_MYBB"1);
require(
"global.php");
add_breadcrumb("{$lang->sprachevariable}");
eval(
"\$templatename = \"".$templates->get("templatename")."\";");
output_page($templatename);
?>
Ruft man mit einem Link die ./dateiname.php auf, wird das definierte Template "muster" angezeigt.

B) Wenn ich in ./ordner_1/ordner_2/funktionsdatei.php am Ende der Datei das Template "muster" mit:
PHP-Code:
<?php
... Funktionen ...
add_breadcrumb("{$lang->sprachevariable}");
eval(
"\$templatename = \"".$templates->get("templatename")."\";");
output_page($templatename);
?>
aufrufen möchte, funktioniert dies nicht.

Derzeit behelfe ich mich damit, dass ich das Template "muster", wie unter "A Punkt 2" beschrieben, mit HTML:
Zitat:../../dateiname.php aufrufe. was auch funktioniert.

Zielsetzung:
Ich würde gerne keine ./dateiname.php verwenden, sondern direkt aus ./ordner_1/ordner_2/funktionsdatei.php das Template"muster" nach "B" aufrufen.

Fragen:
* machbar?
* wenn ja, wie muss die genaue Definiton in "B" (Verweis/Link im Abschnitt "eval"?) dazu lautet?

Danke vorab für jegliche Hilfestellung.
Wer fragt, ist gegebenenfalls für fünf Minuten ein Narr. Wer nicht fragt, bleibt ein Narr.
Hilfe(n) kann man lediglich anbieten. Wer Hilfe nicht annimmt, dem ist nicht zu helfen!
Aktive Version: MyBB: 1.8.24 | PHP: 7.4.10 | SQL: 5.7.28
Zitieren
#2
Hast du den Pfad zur global.php angepasst, wenn du die Datei in einen Unterordner legst?
In deinem Beispiel:
PHP-Code:
require("../../global.php"); 
Zitieren
#3
Yep, der Pfad ist angepasst. Die Funktionsdatei arbeitet einwandfrei, bis auf den Aufruf des Templates am Ende der Funktion.
Wer fragt, ist gegebenenfalls für fünf Minuten ein Narr. Wer nicht fragt, bleibt ein Narr.
Hilfe(n) kann man lediglich anbieten. Wer Hilfe nicht annimmt, dem ist nicht zu helfen!
Aktive Version: MyBB: 1.8.24 | PHP: 7.4.10 | SQL: 5.7.28
Zitieren
#4
Da es beim MyBB im Frontend eigentlich keine Unterordner gibt (das Archiv ausgenommen, das arbeitet aber anders), gibt es zahlreiche relative Links. Daher rate ich von der Verwendung von Unterordnern ab.

Dein Problem kann ich allerdings leider nicht nachvollziehen. Eine konkrete Fehlermeldung oder aussagekräftige Fehlerbeschreibung wäre hier sehr hilfreich. "Funktioniert nicht" kann alles Mögliche sein, von einem PHP-Fehler über einen Fehler im Template bis hin zu Problemen wegen relativer Pfade.
[Bild: banner.png]

Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
Zitieren
#5
(17.10.2020, 15:58)StefanT schrieb: Dein Problem kann ich allerdings leider nicht nachvollziehen. Eine konkrete Fehlermeldung oder aussagekräftige Fehlerbeschreibung wäre hier sehr hilfreich. "Funktioniert nicht" kann alles Mögliche sein, von einem PHP-Fehler über einen Fehler im Template bis hin zu Problemen wegen relativer Pfade.
Wüsste nicht wie ich es genauer als wie bereits im UP beschrieben darstellen könnte. OK, wenn "eval..." eingebunden ist (anstelle des HTML-Code) wird die Funktion korrekt ausgeführt, aber am Ende kommt eine weiße Seite. Dies habe ich nicht erwähnt! Sorry, dachte das MyBB-Profis wissen was geschieht wenn man mitttels einer PHP-Funktionsdatei (aus einem Unterverzeichnis heraus) "eval..." aufruft. War leider eine Fehleinschätzung meinerseits. Mea culpa.

Eine dezidierte Fehlermeldung wird nicht generiert, weder im MyBB-Log noch in meinem PHP-Log. Wo eventuell noch etwas "aussagekräftigeres" stehen könnte würde mich interessieren.
Wer fragt, ist gegebenenfalls für fünf Minuten ein Narr. Wer nicht fragt, bleibt ein Narr.
Hilfe(n) kann man lediglich anbieten. Wer Hilfe nicht annimmt, dem ist nicht zu helfen!
Aktive Version: MyBB: 1.8.24 | PHP: 7.4.10 | SQL: 5.7.28
Zitieren
#6
Ich habe zwar viel Erfahrung, aber hellsehen kann ich leider nicht. Mit irgendwelchem (unvollständigem) Mustercode und ohne Fehlermeldung, ist es mir nicht möglich dein Problem nachzustellen.
Ich gehe stark davon aus, dass dein Fehler in dem Teil zu suchen ist, der aus deinen Beiträgen nicht hervorgeht. Denn außer dem einen Pfad, den doylecc schon angesprochen hat, und den teilweise relativen Links in verschiedenen Templates, gibt es eigentlich nichts zu beachten.
[Bild: banner.png]

Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
Zitieren
#7
Was möchtest Du denn überhaupt erreichen?
Wenn Du im Template eine Variable aus deiner Funktionsdatei ausgeben willst, muss die Variable auch ans Template übergeben werden und der Templateaufruf Bestandteil der Funktion sein.

Dein Mustercode ist da wirklich nicht aussagekräftig genug.
Zitieren
#8
Ich habe nirgendwo geschrieben das ich eine Variable aus der Funktionsdatei an ein Template ausgeben möchte. Der Templateaufruf ist das Problem. Da ich anscheinend zu blöd bin (das Gefühl gebt ihr mir) eine Problematik nachvollziehbar zu schreiben bin es es sicherlich auch. Man sehe mir gnädigerweise meine mangende Intelligenz nach.

Ich kann einfach nicht nachvollziehen, was an meinem UP so unverständlich sein soll.

Nochmals:
* eine Funktionsdatei wird aufgerufen und leistet korrekt seine Arbeit.
* nach Abschluß der eigentlichen Arbeiten soll ein Template zur Bestätung der Arbeitsausführung aufgerufen werden.
Wenn ich nach ?> die ./dateiname.php mit HTML wie im UP erwähnt) ausführe, funktioniert es.

A) Füge ich vor dem abschließenden "}" eine PHP-Anweisung (analog ./dateiname.php) siehe UP ein, funktioniert es nicht. Fehlermeldung das man sich an MyBB wenden soll.
B) Füge ich nach dem abschließenden "}" eine PHP-Anweisung (analog ./dateiname.php) siehe UP ein, funktioniert es nicht.

Für A und B lautet die Fehlermeldung auf dem Desktop das man sich mit MyBB in Verbindung setzen soll. Die Logs aber (um die Fehlerzeile herauszufinden) sind alle leer.

Aber egal, dann belassen wir es eben derzeit beim HTML-Code und gut ist. irgendwann wird jemand vielleicht die Lösung finden und es korrigieren können ...oder auch nicht.
Wer fragt, ist gegebenenfalls für fünf Minuten ein Narr. Wer nicht fragt, bleibt ein Narr.
Hilfe(n) kann man lediglich anbieten. Wer Hilfe nicht annimmt, dem ist nicht zu helfen!
Aktive Version: MyBB: 1.8.24 | PHP: 7.4.10 | SQL: 5.7.28
Zitieren
#9
(17.10.2020, 20:58)Gerti schrieb: Für A und B lautet die Fehlermeldung auf dem Desktop das man sich mit MyBB in Verbindung setzen soll.
Dann aktiviere bitte die Anzeige von Fehlermeldungen, wie im Support-Forum beschrieben: https://www.mybb.de/forum/thread-30269-p...#pid246191

Ich kann dein Problem wie gesagt nicht reproduzieren. Daher brauche ich eine Schritt-für-Schritt-Anleitung, wie ich den Fehler in meinem Testforum nachstellen kann. Mit deinem Code-Beispiel komme ich leider nicht weiter.
[Bild: banner.png]

Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
Zitieren
#10
(17.10.2020, 21:45)StefanT schrieb: Dann aktiviere bitte die Anzeige von Fehlermeldungen, wie im Support-Forum beschrieben:
Wie kommst Du darauf das diese nicht aktiviert sei? Würde ein Fehler von MyBB dokumentiert werden, hätte ich ihn hier erwähnt.
(17.10.2020, 21:45)StefanT schrieb: Ich kann dein Problem wie gesagt nicht reproduzieren. Daher brauche ich eine Schritt-für-Schritt-Anleitung, wie ich den Fehler in meinem Testforum nachstellen kann. Mit deinem Code-Beispiel komme ich leider nicht weiter.
Habe nun die Ursache des Problems gefunden.

Gegeben
PHP-Code:
<?php
define
('IN_MYBB'1);
// Korrekten Pfad zur global.php angepassen weil die Datei im ./ordner1/ordner2/ liegt
require_once ('../../global.php');

// Beispielablauf-1
if ($mybb->user['uid'] == 0) {
echo 
"$lang->hinweis";
}
// Folgeablauf-2
if ($mybb->user['uid'] != 0) {
    if ($mybb->user['uid'] != 1) {
       echo "$lang->Information";
       }
    eval("\$templatename = \" ".$templates->get("templatename")."\";");
    output_page($templatename);
}
?>
Der Ablauf wird korrekt ausgeführt, aber das Template "eval" wird nicht aufgeführt.

Ursache:
Ich rufe im Footer mittels einer PHP-Include-Anweisung bestimmte Daten ab und binde diese ein. Entferne ich im Footer die Include-Anweisung, funktioniert es.

Stellt sich die Frage ob man dies lösen kann, auf die Dateninformation der Include-Anweisung will ich nicht verzichten.

Alternativ bleibe ich eben bei der derzeitigen Lösung in dem ich nach dem "?>" die HTML-Anweisung:
Code:
<meta http-equiv="refresh" content="0; URL=../../templatename.php">
ausführe und in der Root eben die Verknüpfungsdatei belasse (darauf wollte ich eigentlich verzichten).

Danke für Deine Hilfsbereitschaft, sollte Dir eine Lösung einfallen, lass es mich wissen.
Wer fragt, ist gegebenenfalls für fünf Minuten ein Narr. Wer nicht fragt, bleibt ein Narr.
Hilfe(n) kann man lediglich anbieten. Wer Hilfe nicht annimmt, dem ist nicht zu helfen!
Aktive Version: MyBB: 1.8.24 | PHP: 7.4.10 | SQL: 5.7.28
Zitieren


Möglicherweise verwandte Themen…
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Php-Seite immer in bestimmten Style aufrufen bv64 1 789 10.09.2017, 12:34
Letzter Beitrag: bv64