Übergabe weiterer Variablen via GET an Menu URL

  • Hallo zusammen.


    Folgende Problematik zu lösen:


    Es gebt einen Pfad: https://www.meinedomain.de/liste/


    Hier wird eine Liste von Daten ausgegeben. Die Daten werden aus einer MySQL Datenbank gezogen. Ich kann die einzelnen Datensätze als Link anklicken. Durch klick auf den Link wird die ID (nennen wir Sie $UID) des Datensatzes in der URL per GET übergeben und man wird zu folgendem Pfad weitergeleitet:


    https://www.meinedomain.de/liste/datensatz/


    Hier läuft nun eine separate Joomla-Site mit insgesamt 5 Menüpunkten. Der Datensatz wird erfolgreich im Menüpunkt 1 (also im default Menupunkt) so angezeigt, wie er auch soll. Ich brauche aber teile des Datensatzes auch noch in den anderen Menü-Punkten 2-5. Nun habe ich hier natürlich die Frage zu klären, wie ich die variable $UID nun von Menu-Punkt 1 zu den Menupunkten 2-5 bekomme. Mir ist also nicht klar, wie ich hier GET einsetzen kann, da ich die variable ja nicht an die Menu-URL anhängen kann. Oder gibt es andere, elegantere Lösungsansätze. Bitte beachtet, dass es eine Variable ist, die sich logischerweise ändert, je nach dem, welcher Datensatz ausgewählt wird. Ich kann also keine konkrete und statische Zahl hinterlegen, wie man das mit einer externen bzw. internen URL im Menupunkt ggfs. machen könnte. Ich muss schon mit $UID arbeiten können.


    Jetzt freue ich mich, wieder zu lernen und eure Lösungsansätze zu erhalten.


    Vielen Dank im Voraus.


    Beste Grüße an alle

  • Sorry, Later... Ich dachte, ich hätte mit dem Namen der Domain klar gemacht, dass es sich nur um ein Beispiel handelt. Es ist natürlich nicht meine tatsächliche Domain. Die ist noch gar nicht live. Ich hatte das nur in der Form ausgeführt, um klar zu machen, worum es mir geht. Die Domain ist nur beispielhaft und existiert nicht, daher die Fehlermeldung. Sorry, für das Missverständnis...

  • Das tut mir sehr Leid, das habe ich nicht gesehen bzw. gewusst. Ich habe nun auch keine Möglichkeit mehr gefunden, meinen Post noch dahingehend zu ändern. War jedenfalls meinerseits nicht absichtlich.


    Darf ich denn nun, nach dem Hinweis auf den Fehler und meinem einsichtigen Fehlverhalten trotzdem dann auch noch nach Lösungsansätzen fragen, oder zähle ich nun als Persona non grata?

  • Die Lösung für Joomla, was wir aber in Unkenntnis deiner Seite sowie Codes nicht wissen:


    Du schreibst dir für das Menü (Modul mod_menu) ein eigenes Layout per Override. Also statt wie üblich ein Override der default.php und Unterdateien default_xyz.php, ein selbst benanntes, bspw. dingsbums.php und dingsbums_xyz.php.


    Dann wählst im Modul unter "Layout" das "dingsbums" aus.


    Dann schreibst in der Datei, wo du die Variablen einsetzen willst (auswendig keine Ahnung, welche am geeignetsten ist) unterhalb Zeile

    Code
    defined('_JEXEC') or die;

    ein

    Code
    use Joomla\CMS\Uri\Uri;

    Weiter gehts mit dem Code um die GET-Variable aus der aktuellen Seiten-URL zu ermitteln. Beispiel: Seite wird unter dieser aufgerufen bzw. erreicht:

    Code
    https://example.org/sonstwas?UID=215&diesda=dasda
    Code
    $uri = Uri::getInstance();
    $UID = (int) $uri->getVar('UID');
    $diesda = $uri->getVar('diesda');

    Und im einfachsten Fall, was wir in Unkenntnis deiner Seite aber nicht beurteilen können, hängst die UID jetzt an die Menülinks an:

    Code
    $item->flink . '?UID=' . $UID;


    Eine andere Variante wäre mit JavaScript. Im einfachsten Fall per JQuery. Auch hier ist halt ohne Code nix hier machbar.


    Und mit purem PHP fragt man GET-Variablen der URL so ab:

    Code
    $UID = (int) $_GET['UID'];
  • Okay, also das hilft mir grundsätzlich schon mal deutlich weiter, auch wenn ich noch nicht am Ziel bin. Daher danke zunächst dafür.


    Folgende Frage noch:


    die URL der Startseite sieht ohne meine Variable nach standard und derzeit noch ohne SEO wie folgt aus:


    https://example.org/jobportal/…=article&id=53&Itemid=101


    Wenn nun meine Variable per GET dranhängt, sieht die URL logischerweise so aus:


    https://example.org/jobportal/…le&id=53&Itemid=101&nr=52


    52 ist meine übergebene Variable in dem Beispiel. Das funktioniert auch auf der Default-Start-Seite problemlos.


    Nun habe ich deine Codevorschläge im Override der Datei default_hip.php wie folgt umgesetzt, was aber leider nicht so wirklich funktioniert hat. Ich kann dir übrigens gerne kurz Zugang geben, um dich in der Seite einzuloggen. Sie ist noch offline und ich möchte Sie auch noch nicht online setzen. Wenn das für dich in Ordnung ist, sende ich dir einen Testzugang, falls du den brauchst.



    Übrigens bei mir hieß das ganze einfach nur mod_menu und nach dem Override wurden folgende Dateien erstellt:


    default.php

    default_component.php

    default_heading.php

    default_separator.php

    default_url.php


    Diese Dateien habe ich nach dem Override dann einfach in der Form umbenannt, dass ich hinter jedem default_ ein hip_dazuwischen gesetzt habe. Nur damit du weißt, was ich bisher angestellt habe... evilgrin


    Also quasi:


    default_hip.php

    default_hip_component.php

    default_hip_heading.php

    default_hip_separator.php

    default_hip_url.php

  • Hallo Sven,

    ich steige zwar gerade nicht durch alle Details deines Problems (und des Modul-Overrides), aber vielleicht helfen meine zwei Tips auch schon weiter:

    1. deine Zeile 14 sollte vermutlich in das foreach (d.h. frühestens Zeile 28), sonst ist ja das "$item" (vermutlich der jeweilige Menüpunkt) gar nicht klar.
    2. Außerdem glaube ich, dass der erste "." in derselben Zeile genaugenommen ein ".=" sein müsste (bedeutet "an String-Wert anhängen"), sonst macht die Zeile gar nix, was sie überdauert (fügt Strings zusammen ohne sie zu speichern).
  • Ich fürchte, da musst du händisch selbst debuggen, denn zumindest mir ist gerade nicht klar, was genau das Problem ist bzw. wo es passiert. Irgendwelche Fehlermeldungen bei der Ausgabe oder passiert einfach nix?

    Wenn ich dich richtig verstanden habe, möchtest du an jedes Menüitem "&nr=15" anhängen. Das sollte

    Code
    $item->flink .= '&nr=' . $UID;

    innerhalb des foreach eigentlich machen. Wenn das nicht klappt, ist die Frage wo es nicht klapp, also gib deine Variable mal per var_dump($item->flink); oder print_r($item->flink); vor und nach der Zeile aus. Dann weißt du zumindest, ob die Zeile macht, was du willst. Wenn ja, ist halt die Frage, was weiter damit passiert - folge dem flink durch die Layout-Dateien.

  • Zu eigenes Layout:

    default_hip.php ist natürlich falsch.


    So sollte deine Datei-Liste im Override-Ordner aussehen:

    Code
    hip.php
    hip_component.php
    hip_heading.php
    hip_separator.php
    hip_url.php

    Dann unbedingt noch in der hip.php austauschen

    Code
    require JModuleHelper::getLayoutPath('mod_menu', 'default_' . $item->type);

    gegen

    Code
    require JModuleHelper::getLayoutPath('mod_menu', 'hip_' . $item->type);

    Sowie:

    Code
    require JModuleHelper::getLayoutPath('mod_menu', 'default_url');

    gegen

    Code
    require JModuleHelper::getLayoutPath('mod_menu', 'hip_url');

    Dann ins Menü-Modul gehen und im Feld Layout das "hip" auswählen. Jetzt werden deine Overrides als eigenes Layout verwendet.


    So, dann den Code ändern wie oben angedeutet.

    Zeilen 11-13 deines Codes in Post#9 bleiben, wo sie sind.


    Zeile 14

    Code
    $item->flink . '?UID=' . $UID;

    verschiebst aber nach Zeile 24, also ins foreach, wie von Waldbaer ja schon richtig gefunden.

    und derzeit noch ohne SEO wie folgt aus

    Da wird es zum Problem kommen, wenn du umschalten willst.

    Also gehts so weiter: Die Zeile im foreach

    Code
    $item->flink . '?UID=' . $UID;

    tauscht du aus gegen

    Ob's elegant ist, ist mir wurst ;)

  • Mega Re:Later + Waldbaer !!! Es funktioniert!


    Tausend dank euch beiden!


    nr= war schon vollkommen richtig. Sorry für die Verwirrung:


    Re:Later eine Frage bleibt mir aber noch: Du hattest in Bezug auf SEO geschrieben:


    Zitat

    Da wird es zum Problem kommen, wenn du umschalten willst.

    Also gehts so weiter: Die Zeile im foreach


    und mir dann einen Code zur Verfügung gestellt. Ist mit diesem Code nun bereits sichergestellt, dass es keine Probleme beim Umschalten für SEO gibt, oder muss ich hier noch etwas beachten?


    Boah, da sagt man, Montage sind immer sch... Arbeitstage. Meiner ist gerade gut gestartet... :)