Hallo, Gast! (Registrieren)

Letzte Ankündigung: MyBB 1.8.38 veröffentlicht (30.04.24)


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste
(Mobiles) Theme als Standard setzen, wenn Bedingung X erfüllt
#1
Hallo zusammen, ich hoffe, ich bin hier richtig. Es geht um kein Plugin sondern eine eigene Modifikation. Da der Fokus hier mMn auf dem PHP-Bereich liegt, habe ich es auch nicht in den Theme-Bereich gepostet. Falls das falsch war, gerne verschieben.


Meine Ausgangssituation:
Ich habe ein mobiles Design erstellt. Wenn das Forum nun mit einem Gerät mit einer Bildschirmbreite X aufgerufen wird (in meinem Beispiel kleiner gleich 500px), möchte ich, dass dieses bevorzugt geladen wird. 
Dazu gibt es noch die Bedingung, ob Mitglieder ein bestimmtes Profilfeld angehakt haben, oder nicht und ob es sich um ein Mitglied oder einen Gast handelt.

Folgenden Code habe ich nun fertig gestellt und möchte diesen via Patches einfügen. Ich nehme an, dass ich diesen in die global.php einfügen muss.

Der Code ist vermutlich umständlicher als nötig, aber ich kenne mich noch nicht gut genug aus, daher bitte ich um Verständnis.

PHP-Code:
// Function to set mobile design cookie,  weil PHP den Viewport nicht selbst bestimmen kann
function setMobileDesignCookie() {
    echo '<script>var mobileDesign = (window.innerWidth <= 500) ? 1 : 0;if (document.cookie.indexOf("mobile_design=" + mobileDesign) == -1) {document.cookie = "mobile_design=" + mobileDesign + "; path=/";location.reload();}</script>';}

setMobileDesignCookie(); // Set the cookie when the page loads, damit die Info gespeichert bleibt

if (isset($_COOKIE['mobile_design']) && $_COOKIE['mobile_design'] == 1) { // Check the set cookie and if the condition is true
    if ($mybb->user['uid'] != 0) { // User is logged in
        if ($mybb->user['fid25']) { // Profile field is active
            $mybb->user['style'] = 29// Load Mobile Design
        } else { // Profile field is not active
            $mybb->user['style'] = (int)$mybb->user['style']; // Load Custom Design
        }
    } else {
        if ($mybb->cookies['mybbtheme']) { // User is a guest
            $mybb->cookies['mybbtheme'] = 29// Cookied Design = mobile Design
        }
    }
} else { 
// Viewport is larger
    if ($mybb->user['uid'] != 0) { // User is logged in
        $mybb->user['style'] = (int)$mybb->user['style']; // Load Custom Design
    } else { // User is a guest
        $mybb->cookies['mybbtheme'] = (int)$mybb->cookies['mybbtheme']; // Load Cookied Design
    }



Nun habe ich aber folgendes Problem:
Egal ob ich mich ausloggen möchte, einen Beitrag posten möchte oder auch nur ein Thema ansehen möchte, bekomme ich eine weiße Seite und die Aktion wurde nicht durchgeführt. 

Ich habe den Code schon gefühlt an alle möglichen Stellen gesetzt, die zumindest für mich Anfänger als sinnvoll schienen (vor und nach "$plugins->run_hooks('global_start');" vor und nach "// Fetch all necessary stylesheets" usw. Auch diverse KI-Tools habe ich bereits bedient, um den Code auf Richtigkeit zu prüfen, aber das Problem bleibt bestehen.

Nun meine Frage: kann mir jemand helfen?

Ist die global.php überhaupt die richtige Datei, oder muss ich den Code oben doch in die headerinclude packen? Oder muss er doch in eine komplett andere Datei? Oder muss ich ihn aufdröseln und kann ihn gar nicht als einen Block einfügen?

An welche Stelle(n) muss ich den Code ansonsten packen?

Ich hatte zwischenzeitlich auch die Vermutung, dass es evtl. an bereits bestehenden Codeänderungen liegt, die damit kollidieren, denn in meinem lokalen Testboard hat alles geklappt (allerdings hat dies eine ältere Version und nicht die gleichen Plugins installiert).

Dazu habe ich euch auch mal meine global.php angehangen.

Zusätzliche Infos:

MyBB Version 1.8.37
PHP Version 7..4.33

Vorab noch zwei Dinge: 

1. Das Theme/Plugin GoMobile ist leider nicht kompatibel, daher musste ich eine eigene Lösung finden.
2. Ich habe bereits 2 responsive Designs, es soll also hier nicht um das Thema "Mobiles Design oder doch lieber responsives Design" gehen, sondern darum, was technisch möglich ist.

Ich würde mich über Feedback und Lösungsansätze freuen.


Angehängte Dateien
.php   global.php (Größe: 39,61 KB / Downloads: 0)
Zitieren
#2
Ohne deinen Code völlig inspiziert zu haben, nur kurz:

1. Du benötigst keine separate Funktion "setMobile...", wenn diese sowieso in der nächsten Zeile aufgerufen wird. In deinem Fall reicht die einzeln echo-Zeile.

2. Dein Javascript scheint fehlerhaft. Überprüfe: path=/";

Eine weiße Seite bedeutet in fast allen Fällen Fehler im PHP-Code, daher keine Ausführung und keine Ausgabe.

Als Referenz könntest du dich an bereits vorhandene MyBB-Funktionen richten - evtl. entsprechende Codezeilen und Funktionen kopieren...
Siehe einfach mal in die global.php Zeile 112 ff.

[ETS]
MyBB + innovative Themes:
NokiaPort.de Forum Nokia-Traditionsforum seit 2006.
Live Escape Game Forum Diskussionsplattform für Escape-Rooms.
Unlösbares Problem, Dilemma? -> das Nötel Smile
Zitieren
#3
Hallo Exitus,

ich danke dir für deine Antwort.

(10.06.2024, 09:34)[ExiTuS] schrieb: 1. Du benötigst keine separate Funktion "setMobile...", wenn diese sowieso in der nächsten Zeile aufgerufen wird. In deinem Fall reicht die einzeln echo-Zeile.

Als ich nach einem geeigneten Code gesucht habe, stand dort, dass man einen Cookie erstellen muss. Dies tut die Function setMobile... und da sie bei jedem Seitenreload abgefragt wird (es könnte ja sein, dass sich zwischenzeitlich der viewport ändert), muss ich die Function aufrufen. Dein Text ergibt natürlich Sinn, aber ich bin neu in der Materie und die dortige Erklärung ergibt für mich halt auch Sinn.

(10.06.2024, 09:34)[ExiTuS] schrieb: 2. Dein Javascript scheint fehlerhaft. Überprüfe: path=/";

Hier bin ich ehrlich gesagt raus. Ich habe das auch vermutet, aber laut der Erklärung und den MyBB Cookiepfadeinstellungen, müsste es so stimmen.

(10.06.2024, 09:34)[ExiTuS] schrieb: Als Referenz könntest du dich an bereits vorhandene MyBB-Funktionen richten - evtl. entsprechende Codezeilen und Funktionen kopieren...
Siehe einfach mal in die global.php Zeile 112 ff.

Das mach ich immer als erstes, da ich meine. Codes auch verstehen möchte, um nicht wegen jedem Pups immer fragen zu müssen. Wie gesagt, ich hab den Code schon an diverse Stellen gesetzt und es hat zwar der Wechsel funktioniert, aber bei jeder "action" kam eine weiße Seite, also nicht pauschal schon auf dem index.
Das einzige, was ich gefunden habe, was annähernd passt (für mich als Anfänger), war der Part mit welches Theme geladen wird. Das Gomobile Plugin habe ich auch angesehen, bin aber nicht schlau draus geworden.

Ich werde mir den Code nochmal am Wochenende vornehmen und besagte Stelle prüfen und ggf. deine Anmerkungen einbauen.

Danke auf jeden Fall für den Hinweis Smile
Zitieren
#4
bei weißer Seite lohnt immer ein Blick ins Server Error Log; man möchte doch wissen, was es auslöst

Ich frage mich eh, warum du das Ganze nicht direkt als Plugin umsetzt; eine Vorlage dafür hast du ja mit dem GoMobile-Plugin. Da muss zwar etwas für PHP8 angepasst werden, aber als Ideenspender ist es sicher eine Option.
Dafür gibt es doch das Plugin-System, dass man mit eigenem Code nicht die Core-Dateien verwüstet Wink

Zum Aufbau eines Plugins lohnt es sich die mitgelieferte inc/plugins/hello.php anzuschauen
Die Doku bietet weitere Hilfe.
Kein Support per PN, Mail, Telefon, Hausbesuch, Discord, Telegram, WhatsApp und anderen nutzlosen Tools
Zitieren
#5
das mag für dich alles so einfach sein, aber meine PHP-Kenntnisse reichen aktuell gerade mal zu einfachen Abfragen aus der DB.

Natürlich schau ich, dass ich dazu lerne, aber so leicht ist das nich, wenn man es nur am Wochenende schafft, neben ganz vielen anderen Dingen.

Die Doku hab ich mir natürlich auch schon mal angesehen, aber ich verstehe sie nicht, da mir viele Grundlagen noch fehlen.

Das ist wie wenn einer gerade mal den CSS Befehl color:red versteht und dann soll die Person gleich ne komplette und gut funktionierende Website coden.

Bitte ein bisschen realistisch bleiben. Wenn man nicht helfen kann oder mag, dann einfach nicht antworten. Das frustet mich nämlich gerade ungemein, da ich seit Wochen an dem Problem sitze und ihr hier mein letzter Ausweg seid. :/
Zitieren
#6
sorry dass ich lebe und nichts dagegen tue

viel Glück, ich werde dich nicht weiter belästigen

Wer sich durch Vorschläge angegriffen fühlt, sollte gar nicht erst fragen, man man man
Kein Support per PN, Mail, Telefon, Hausbesuch, Discord, Telegram, WhatsApp und anderen nutzlosen Tools
Zitieren
#7
Ich habe deine Antwort nicht als Vorschlag empfunden, da es absolut nichts mit meiner Frage oben zu tun hatte und mich einer möglichen Lösung nicht weitergebracht hat. Sorry not sorry.
Zitieren
#8
Habe es jetzt doch leider über die userAgents festlegen müssen. Ich habe verschiedene Ansätze ausprobiert, sogar einen neuen, keiner hat funktioniert.

Die userAgents waren zwar meine zweite Wahl, aber es klappt und ich bin happy.

ist also erledigt.
Zitieren


Möglicherweise verwandte Themen…
Thema Verfasser Antworten Ansichten Letzter Beitrag
  PHP: if-Bedingung - Wo/Wie? (profilfeld !empty ODER nur bei best. guid) Glücksklee 5 1.632 17.10.2021, 20:10
Letzter Beitrag: Glücksklee