Kein Zugriff auf Request-Variablen in Profil-Subpages

  • Betroffene App
    WoltLab Suite Forum

    Hallo,

    hier ein Problem, das ich beim Entwickeln eines Plugins festgestellt habe:
    Das Plugin erzeugt eine Sub-Page im User-Profil. In dieser habe ich ein Formular mit ein paar Sortier- und Filter-Feldern integriert.
    Doch beim Abschicken der Form kommen die Daten nicht in der SubpageProfileMenuContent.class.php an.

    userProfileSubpage.tpl

    Code
    <form method="post" action="{link controller='User' object=$__wcf->user}{/link}#subpage">
      <select name="sortOrder">
        <option value="ASC">{lang}wcf.global.sortOrder.ascending{/lang}</option>
        <option value="DESC">{lang}wcf.global.sortOrder.descending{/lang}</option>
      </select>>
    </form

    SubpageProfileMenuContent.class.php

    Code
    if (isset($_REQUEST['sortOrder'])) $this->sortOrder = $_REQUEST['sortOrder'];

    Bei der Ursachensuche habe ich herausgefunden, dass die REQUEST-Variablen noch in der UserPage.class.php ankommen, "auf dem Weg" zur Subpage jedoch verloren gehen.

    Beste Grüße,
    Less

  • Hallo!
    Es wäre nett, wenn derjenige, der das Thema als "Ist kein Fehler" markiert hat, hier kurz die richtige Lösung erklären könnte, wie man Eingaben aus einer UserProfil-Subpage an die entsprechende class.php überträgt.

    Nimm mal direkt SubpageProfileMenuContent als Controller und versuch es dann nochmal.


    Klappt leider nicht, die Unterseiten im Profil werden irgendwie von der UserPage includet.

  • Hallo Alexander,

    Danke für den Hinweis! Hättest du denn ein Code-Snippet für mich? Die Profil-Reiter sehen im Quelltext ja ganz normal aus, d.h. ein Klick auf diese wird anscheinend von einem Ajax-Script abgefangen und ausgewertet. Nur wie soll ich es selbst ansprechen? Da wäre ein kleines Code-Snippet hilfreich. Muss auch nicht lauffähig sein, oder ein kleiner Hinweis wäre super, wo ich weitersuchen soll.
    Ajax ist ja ein sehr breites Feld.

    Beste Grüße,
    Less

    • Offizieller Beitrag

    Jeder Container hat seine eigene ID, die dem Container selbst bekannt ist. Nun kannst du beim Klick auf einen Button die entsprechenden Formularfelder auslesen und via AJAX an deine passende PHP-Klasse übermitteln, in der Rückgabe kannst du zum Beispiel ein fertiges Template zurückliefern, dass du dann im Container anzeigst. Im Prinzip nicht anderes als eine normale *Form-Klasse, nur das die Interaktion via AJAX statt findet.

  • Jeder Container hat seine eigene ID, die dem Container selbst bekannt ist. Nun kannst du beim Klick auf einen Button die entsprechenden Formularfelder auslesen und via AJAX an deine passende PHP-Klasse übermitteln, in der Rückgabe kannst du zum Beispiel ein fertiges Template zurückliefern, dass du dann im Container anzeigst. Im Prinzip nicht anderes als eine normale *Form-Klasse, nur das die Interaktion via AJAX statt findet.


    Besten Dank für deine Erklärung! :thumbup: (auch wenn mir der Ablauf schon klar war). Ich suche wie gesagt nach einem Code-Beispiel für diesen Ajax-Befehl (denn es gibt soviele Ajax-Scripte im WCF2, dass ich nicht weiß, wo ich mit meiner Suche anfangen soll).
    Es ist doch bestimmt schon an einer Stelle ein solches Script im Einsatz, dass als Response das komplette Template liefert und ausgibt. Wenn du eine Stelle weißt, wo ich es mir anschauen kann, wäre ich schon sehr dankbar. Der Name einer passenden JS-Funktion reicht auch, dann finde ich es über die Volltextsuche.

    Beste Grüße,
    Less

    • Offizieller Beitrag

    Nun, wir reden hier über eine triviale AJAX-Request, da ist nichts besonderes dran. Ein Beispiel für die simple Verwendung von WCF.Action.Proxy mit einer Ableitung von wcf\data\AbstractDatabaseObjectAction:

    In der PHP-Methode musst du nur ein Array zurückgeben, etwa:

    PHP
    return array(
        'template' => WCF::getTPL()->fetch('myAwesomeTemplate', 'myApplication');
    );
  • Habe die Ajax-Variante lauffähig. ;) Danke nochmal!

    Allerdings ist es damit natürlich nicht möglich per URL auf eine sortierte UserProfileSubpage zu verlinken. Das ist sehr bedauerlich! Entsprechend brauche ich doch noch eine Brücke, die die REQUEST-Parameter von der UserPage.class.php (dort kommen sie nämlich noch an) an die UserProfileUserSubpage weitergibt. Nur wie? Oder ist das techn. unmöglich? :huh:

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!