Routing to LandingPage landet ganz woanders

  • Affected App
    WoltLab Suite Core

    Hallo zusammen,

    ich hoffe, dass es am Ende nur eine Konfigurationssache ist, aber ich kann mir das vorerst nicht anders als ein Fehler erklären, weshalb ich es in dieses Forum poste.

    Meine Seite hat folgendes setup:

    / -> Website-Package

    core/ -> WSC/WCF

    board/ -> WBB

    Wenn man die URL aufruft soll natürlich / aufgerufen werden und nicht /core/ und auch nicht /dashboard/ oder /core/dashboard/. Ich habe deshalb eine Seite angelegt die im Website-Package auch als Einstiegsseite definiert ist:

    Soweit so gut. In ControllerMap::lookupDefaultController() wird das richtige Array aus den landingPages geholt. Danach wird die PageID (37) extrahiert und über ControllerMap::lookupCmsPage() überprüft. ControllerMap::lookupCmsPage() greift auf customUrls['reverse'] zu welches (abgekürzt) so aussieht:

    er holt sich also __WCF_CMs__37-0 und gibt folgendes zurück:

    Code
    (
                [application] => site
                [controller] => 
            )

    Mit dieser Info wird ControllerMap::resolveCustomController() aufgerufen. Hier kommt meiner Meinung nach der Fehler ins Spiel. Es wird nun in customUrls['lookup']['site'] nach dem übergebenen controller (leerer String) geschaut. Da alle CmsPages keine custom-url haben sieht der lookup table für site so aus:

    Code
    [customUrls:protected] => Array
                    (
                        [lookup] => Array
                            (
                                [site] => Array
                                    (
                                        [] => __WCF_CMS__61-1
                                    )
    
                            )

    __WCF_CMS__61-1 ist einfach die letzte Seite des site packages. Statt der Page 37 wird jetzt die Page 61 geladen und wir sind ganz woanders als wir eigentlich sein sollten. Wie oben erwähnt möchte ich gerade für meine Einstiegsseite keine custom-url setzen und auch das setzen von custom-urls für die anderen seiten finde ich unnötig, da dafür ja die Seitentitel dienen.

    Was ist hier falsch gelaufen?

  • Hinzukommt das die Seite mit der ID 61 gar keine Cms-Seite ist sondern einen Controller hat. Dieses wird aber vom RoutingCacheBuilder nicht erfasst, da die Seite einen leere controllerCustomURL hat, wodurch der controller nicht geladen wird und es zur Cms Page gemacht wird.

  • oh sry, da hab ich das falsche Wort verwendet. Da alle Seiten als "__WCF_CMS__" angezeigt wurden, habe ich CmsPage geschrieben. In wirklichkeit sind alle Seiten bis auf 37 (welches das Dashboard vom typ "text" ist) vom typ "system" mit einem controller (siehe dazu meinen zweiten Beitrag).

    Das die Einstiegsseite keine customURL hat halte ich für sinnvoll, da ich nicht möchte das man beim Aufruf der Seite direkt umgeleitet wird.

  • Die Custom-URL spielt grundsätzlich bei der Einstiegsseite keine Rolle, da diese in diesem Fall nicht verwendet wird. Fakt ist aber, dass die Page #37 bei dir eine CMS-Seite ist, diese aber über keine URL verfügt. Das ist ein Umstand der gar nicht möglich sein sollte, das ACP lässt dies auch gar nicht zu. Kann es sein, dass du per Datenbankeingriff nachgeholfen hast?

  • Ja, das habe ich. Aus dem oben genannten Grund. Den tue ich das nicht. Wird beim Aufruf der Website auf /dashboard/ weitergleitet was für mich falsch ist.

    Wenn ich das WSC neu installiere und das WSC im Hauptordner habe funktioniert es wie von dir beschrieben. Da bei mir das WSC/WCF aber unter core/ liegt scheint die Einstiegsseite anders zu funktionieren.

    Zuerst hat der Requesthandler auf /core/ umgeleitet (ohne /dashboard/) dann habe ich ein Dashboard für meine PackageID erstellt und als Einstiegsseite definiert). Jetzt leitet er zwar nicht mehr auf /core/ um, dafür aber auf /dashboard/. Mein Versuch die customURL zu entfernen hatte auch zuerst funktioniert, bis eben weitere Seiten hinzugefügt wurden.

    Wenn es hier einen offiziellen Weg gibt, beim Aufruf der Website nicht weitergeleitet zu werden, nehm ich diesen natürlich lieber :)

  • Du kannst für / einer anderen App keine Seite festlegen, die nicht zu dieser Anwendung gehört, es erfolgt stets die Weiterleitung. Wenn es sich eh um eine eigene App handelt, dann kannst du auch einfach einen leeren Controller anlegen, der seine Inhalte über das Boxen-System erhält, letztlich ist das Dashboard nicht sehr viel anders.

  • Das Ding ist ja, das ich es wie du beschrieben hast bereits gemacht habe, leider funktioniert es nicht.

    Wenn die Seite zum Core gehört und als Startseite markiert ist wird die Startseite zu /core/ (ohne customURL) umgeleitet. Wenn ich die Seite aber meiner App / zuordne wird die Startseite zur customURL /home umgeleitet. Mir bleibt also derzeit nur die Möglichkeit das WSC im Hauptverzeichnis zu installieren um eine Weiterleitung zu vermeiden. Das würde ich aber gerne vermeiden.

  • Korrekt.

    Ich habe auch extra nochmal eine neue Test-Installation gemacht um evtl. Nebeneffekte auszuschließen.

    Ich habe eine Seite "Home" erstellt. Diese als Einstiegsseite markiert und der App / zugeordnet. Dann habe ich unter Apps verwalten bei der App / die Einstiegsseite auf "Home" umgestellt und den Cache geleert. Und weil solche Weiterleitungen per 301 stattfinden habe ich das ganze über Chrome Inkognito getestet um Browser-Caching auszuschließen. Dennoch wird weiterhin auf /home/ umgeleitet.?(

  • Das sollte so in der Tat nicht sein, ich werde mir das nochmal in Ruhe anschauen müssen. Da ich aktuell bereits in den Tests für das Update bin, würde eine etwaige Behebung aber frühestens mit dem darauffolgenden Update kommen; Ich lasse dir im Zweifel den Link zum Commit hier zum selber einpflegen nach eigenem Ermessen.

  • Ich habe mir das ganze nun mal genauer angeschaut: Ein eigener Controller funktioniert einwandfrei, ich habe als Experiment mal die Liste der abonnierten Foren als Startseite des Forums festgelegt (Forum: /, Core: /core/) und es funktioniert wie erwartet.

    Allerdings ist Chrome selbst mit deaktiviertem Cache über die DevTools noch sehr hartknäckig, daher habe ich teilweise mit Pseudo-Parametern als Cache-Buster gearbeitet, etwa /?foo=bar, damit ich die korrekte Seite zu sehen bekam.

    Wenn du in den DevTools Preserve log aktivierst, kannst du den Internal Redirect erkennen:

  • Ich habe mir das ganze nun mal genauer angeschaut: Ein eigener Controller funktioniert einwandfrei

    Kann ich bestätigen, aber darum ging es nicht :) Das Problem ist das ich eine CMS-Seite als Startseite definiert habe und die hat keinen eigenen Controller. Sondern ist vom typ Text wie das com.woltlab.wcf.Dashboard Und mit so einer Seite wird leider weitergeleitet. Hier sollte aber meiner Meinung nach kein Unterschied gemacht werden. Startseite ist Startseite.

  • Das habe ich schon verstanden, die Umleitung auf den Core ist ein Seiteneffekt der Implementierung von CMS-eigenen Seiten bzw. ein Folge des Application-basierenden Routings. Eine Änderung wäre nicht-abwärtskompatibel, daher wird es auf absehbare Zeit keine Änderung an diesem Verhalten geben. Ein eigener (leerer) Controller kann daher als Ersatz fungieren.

Participate now!

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