Farbschema ändern über externe Seite

  • Affected Version
    WoltLab Suite 6.0

    Guten Tag,

    ich habe ein User Controll Panel für mein Gaming Projekt, dort kann ich aktuell die Farbe von hell auf dunkel wechseln und gleichzeitig ändert sich das Forendesign (WSC 5.5). Welche Funktion von WSC müsste ich in der PHP Datei vom UCP einbauen damit sich nicht das Design sondern das Farbschema von hell auf dunkel im Forum ändert (WSC 6.0)?

    Vielen Dank im Voraus.

    Mit freundlichen Grüßen

    Allrounder18

  • Go to Best Answer
  • Hallo,

    hilft dir das weiter?:

    ich denke schon, dass das weiterhelfen könnte, ich kenn mich nur leider damit nicht aus wie man sowas richbtig einbaut.

    Aktuell sieht die Funktion so aus bei mir

    Code
    else if ($status == "setcolorscheme") {
        if (empty($userid) || $theme < 0) return;
        $userObj = getUserOptionID($userid);
        $action = new UserAction([$userObj], 'update', [
            'data' => array(
                'optionID' => $theme
            )
        ]);
        $action->executeAction();
        echo "1";

    Mein Problem ist, dass optionID in einer anderen Tabelle steht in WSC als z. B. BanExpires, scheinbar greift meine Datei alles aus einer Tabelle ab.

    Es müsste ja auch optionID52 heißen, wie kann ich dies da in dem Code einbauen?

    Vielen Dank im Voraus.

    Mit freundlichen Grüßen

    Allrounder18

    Edit: Frage angepasst.

    Edited 2 times, last by Allrounder18 (November 5, 2023 at 5:09 PM).

  • Hallo,
    du müsstest das Objekt vom jeweiligen Nutzer erhalten und kannst dann mit der verlinkten Klasse das Schema ändern.


    Hier ein kleines Beispiel, für den eigenen Benutzer (der Nutzer muss angemeldet sein!):

    PHP
    <?php
    require_once('global.php');
    
    use wcf\system\WCF;
    use wcf\system\user\command\SetColorScheme;
    
    $command = new SetColorScheme(WCF::getUser(), (WCF::getUser()->getUserOption('colorScheme') === "light" ? "dark" : "light")); /* WENN das Schema bereits hell ist, DANN wechsle zu dunkel, ANSONSTEN zum hellen. */
    $command();
  • Danke, kann ich das in meinen oben genanten Code einbauen?

    Mein PHP Code aus dem UCP sieht so aus:

    Edited 2 times, last by Allrounder18 (November 5, 2023 at 6:00 PM).

  • Hallo,
    ja, Pfad anpassen nicht vergessen. (und natürlich die Variable $userid (sonst änderst du das Schema des Administrator-Kontos.))


    Ich habe das Ganze mal erweitert, um eine Abfrage, ob der Nutzer überhaupt existiert.

    Edited 2 times, last by Felix | D1strict: Abfrage "system" hinzugefügt (November 5, 2023 at 6:27 PM).

  • Danke, hat geklappt aber die userid sollte ja auch nicht meine eigene sein sondern die userid des jeweiligen Users.

    Macht das hier Sinn? if (empty($userid) | | $theme < 0) return;

    Edit: Was muss ich einbauen, damit erkannt wird ob im Forum z. B. schon hell eingestellt ist wenn ich im UCP auf hell umstellen möchte?

  • Du meinst if($user->getUserOption('colorScheme')){}?

    Hallo,


    beispielsweise so:

    Was muss ich da ausführen damit das Schema im Forum nicht geändert wird?

    Du kannst aktuell nicht steuern, in welchen Apps das Schema geändert bzw. nicht geändert wird. Entweder überall im Core oder gar nicht.

  • Dein Code funktioniert leider nicht.

    Was muss ich da ausführen damit das Schema im Forum nicht geändert wird? Das war falsch formuliert, ich meinte was muss ich ausführen, damit das Schema im WSC nicht geändert wird?

    Edited once, last by Allrounder18 (November 5, 2023 at 6:48 PM).

  • Hallo,
    jetzt verstehe ich. Alternativ könntest du das Farbschema selbst bestimmen:


  • Hallo,

    wenn du den Code 1:1 kopiert hast, wird das Schema auf hell gestellt.
    Du müsstest natürlich vorher abfragen, was für ein Schema in deinem UCP aktiv ist und dann eine Bedingung hinzufügen, wann light, dark oder system eingestellt wird.
    Alternativ fragst du bei jedem Aufruf deines UCP ab, was für ein Schema aktuell im Core eingestellt ist und änderst das Schema im UCP.

  • So in etwa?

    Code
    if($theme === "dark") {
        	$action = new SetColorScheme($user, ($user->getUserOption('colorScheme') === "light" ? "dark" : "light"));
        }
        else{
    	$action = new SetColorScheme($user, ($user->getUserOption('colorScheme') === "dark" ? "light" : "dark"));
        }
        $action();
  • Edited once, last by Allrounder18 (November 5, 2023 at 9:04 PM).

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!