Weiterleitung des Users an die letzte besuchte Seite

  • Moin in die Runde,

    bisher wurde ich bei den Exentions und Google noch nicht fündig. Vielleicht hat aber jemand eine Idee.


    Die Herausforderung: Wenn sich ein User einloggt, soll dieser auf die Seite weitergeleitet werden, die er als letztes besucht hatte.


    Bisher ist mir hier keine elegante Lösung eingefallen. Vermutlich müsste das Login-Modul etwas angepasst werden.


    Vierle Grüße

    David

  • Ich stelle mir gerade vor, ich bin auf irgendeiner beliebigen Seite im Web und gehe auf die Joomla-Seite, auf der sich das Modul befindet. Sobald ich mich einlogge, werde ich auf die vorherige Seite weitergeleitet, die mit Joomla gar nichts zu tun hat. Oder sehe ich das falsch? Stichwort: history.back()


    Was hast du bisher versucht?

    Kannst du ein ganz konkretes Bespiel für dein Vorhaben nennen?

  • Moin, danke für eure Rückmeldung bisher.


    Also konkret: Ein Nutzer loggt sich aus dem System aus. Das System speichert die letzte Seite, die der User aufgerufen hat. Nach einiger Zeit loggt sich der User wieder ein und wird direkt auf die Unterseite der Joomlainstallation geleitet, die er besucht hat. Ein wenig vergleichbar ist es mit einem Spiel, in dem der Spielstand automatisch gespeichert wird. Der Nutzer hat sich bis Unterseite 8 vorgearbeitet und muss dann beim erneuten Login nicht noch einmal durcharbeiten. Die Unterseiten sind als Menü vorhanden, jedoch nicht sichtbar für den Nutzer.


    Ich habe mir die Komponente com_users angeschaut und hier ein Override von default_login.php erstellt. Im Web hatte ich einen alten Lösungsansatz gefunden, dass es hier eine Zeile sich um Weiterleitungen kümmert. Ab Zeile 61 geht es los, jedoch stehe ich hier etwas auf dem Schlauch, wie ein konkreter Lösungsansatz an dieser Stelle aussehen sollte.


    PHP
    <?php $return = $this->form->getValue('return', '', $this->params->get('login_redirect_url', $this->params->get('login_redirect_menuitem'))); ?>
                <input type="hidden" name="return" value="<?php echo base64_encode($return); ?>" />
                <?php echo JHtml::_('form.token'); ?>
            </fieldset>

    Ich hoffe, dass das jetzt etwas verständlicher ist.

    Viele Grüße

    David

  • Das return-Feld erwartet nicht mehr als eine URL, einen Link (url64_encoded). Das kann jeder sein.


    Du könntest in einem Plugin in Methode "onUserLogout" speichern, auf was für einer Seite sich ein User ausgeloggt hat. Dafür kommt z.B. ein langlebiges Cookie in Frage, in dem du die URL base64encoded speicherst und dann später im Formular ausliest und in das return einsetzt.


    Sehe allerdings nicht unbedingt, dass "doofe" User sich 1) immer auf der gewünschten Seite ausloggen, sich 2) überhaupt "aktiv" ausloggen. 3) Keine Ahnung, ob da irgendwelche Remember-Plugins ("Angemeldet bleiben") reinwerkeln. 4) irgendwelche Weiterleitungs-Direktiven in Login- und Logout-Modulen/Komponenten reinwerkeln. 5) User Ihre Cookies nicht löschen beim Schließen des Browsers. 6) etc. pp.


    Hudelcode. Nur ein bisschen getestet:


    Plugin:


    default_login.php

  • Moin Re:Later,

    danke dir für deine Antwort und deine Mühe. Im Moment gehe ich davon aus, das der User sich einfach im besten Fall dran hält und keine weiteren Faktoren mitschwingen. Hättest du noch einen Tipp, wo ich ersteren Code einzufügen habe?


    Beim längeren Überlegen wäre ein anderer Ansatz die Unterseite zu speichern, zu welcher der User vorgedrungen ist und das zu merken. Also User X hat das nicht sichtbare Menü bis zum 5. Eintrag von 10 "erspielt". Dann wäre klar, zu welcher Seite der User wieder geleitet werden müsste.


    Viele Grüße

    David

  • Daer Code gehört in ein user- oder system-Plugin, das du dir selber schreiben musst. Außer dem bisschen drumrum ist es ja schon fast fertig ;-)


    Dein Ansatz war halt das Anmeldeformular und der return-Wert darin. Krux dabei: Zu dem Zeitpunkt wo jemand in das Formular reingeht, weiß Joomla ja noch nicht, welcher User das sein wird und welche Weiterleitung für ihn zutrifft, welche Weiterleitung einzutragen ist. In einer Datei speichern nützt also bei der Idee nix. Deshalb Cookie. Weils eben individuell für den Besucher bei ihm abgelegt wurde. Anders müsstest dann eine spätere Umleitung basteln.

    wäre ein anderer Ansatz die Unterseite zu speichern, zu welcher der User vorgedrungen ist und das zu merken.

    Geht vom Prinzip her genauso wie im Plugin-Code oben. Kannst auch in einem Override deiner Arbeitsschritte die Cookies schreiben lassen. Zeilen 5 bis 29.