Doppelte IF Abfrage in Override

  • Joomla Version
    5.1.0
    PHP Version
    PHP 8.2.x
    Hoster
    Lokal

    Guten Morgen,

    ich habe wieder mal eine spezielle Frage:

    Thema ist schon erledigt, siehe weiter unten. Beitrag erstellt als Hilfe für andere.

    Ich habe einen Artikel Override in welchem unten vor dem Author usw. eine Tabelle dynamisch erstellen lasse, welche technische Ansprechpartner des jeweiligen Bereichs darstellt.

    Jetzt wird es so sein das diese Bereiche in ein paar Seiten mit Seitenumbrüchen unterteilt werden wird.

    Ich würde nun gerne diese Tabelle nur auf der Hauptseite des Artikels anzeigen lassen und dachte das mache ich mit einer IF Abfrage.

    Die Tabelle wird allerdings nur dann erstellt, wenn es Kontakte zu diesem Bereich gibt, was auch durch eine IF Abfrage durchgeführt wird.

    Anbei mal das Beispiel wie es aussieht:

    $Results kommt aus einer Datenbankabfrage welche über ein Include eingefügt worden ist.

    Ich dachte ich kann mit der URL das Thema lösen.

    Wenn ich auf eine Seite vom Artikel gehe, wird ja die URL um &start=1 erweitert sowie um :Beitragsname.

    Code
    Hauptseite vom Artikel
    http://Servername/joomla/index.php/orga/intern/uebersicht?view=article&id=27&catid=24
    
    Seite 2 vom Artikel
    http://servername/joomla/index.php/orga/intern/uebersicht?view=article&id=27:Artikelname&catid=33&start=1

    Um die URL abzufragen habe ich oben noch zu den Standardparametern folgendes hinzugefügt:

    Code
    $uri     = Uri::getInstance();
    $absolute_url = $uri->toString();

    Das wollte ich dann nutzen um die 2te IF Abfrage, vor der Erstellung der Tabelle durchzuführen:

    Leider führt das dazu, das immer diese Tabelle hinzugefügt wird.

    Als ich diese Zeilen schreibe, passiert das was letzte Woche nicht geklappt hat.

    Ich habe die Tabellen Erstellung in die Else Phase genommen und oben die erste IF Klausel negiert... jetzt funktioniert es.

    Ich lasse das hier stehen, evtl. hilft das ja jemand anderes auch bei einem Problem :)

    Thema aber selbst gelöst.

  • Update: Leider hat sich doch noch ein Problem eingeschlichen:

    Im Feld Beitragseiten im Artikel kann auf die Hauptseite und auf "Alle Seiten" navigiert werden.

    Die URLs sehen wie folge dazu aus:

    Code
    Hauptseite vom Artikel
    http://Servername/joomla/index.php/orga/intern/uebersicht?view=article&id=27&catid=24
    
    Hauptseite über Beitragsseitenmenü vom Artikel
    http://servername/joomla/index.php/orga/intern/uebersicht?view=article&id=27:Artikelname&catid=33
    
    Alle Seiten über Beitragsmenü vom Artikel
    http://servername/joomla/index.php/orga/intern/uebersicht?view=article&id=27:Artikelname&catid=33&showall=1

    Ich müsste also abfragen ob die aktuelle Seite eine von den 3 oben genannten ist und dann die Tabelle anzeigen lassen oder das die Seite keine der oben genannten ist und dann nichts anzeigt, jedoch wenn sie es ist die Tabelle darstellt....

    1. Versuch:

    2. Versuche mit Negierung:

    Bei der Negierung wird die Tabelle gar nicht mehr angezeigt und beim ersten weiterhin bei allen Seiten....

    Somit bräuchte ich doch noch ein wenig Hilfe.

  • So habs dann doch hinbekommen.

    Hab die 3 If Abfragen zu einer gemacht mit dem OR Operator.

    Was mir aber auch nicht klar war ist das "==" als Operator Case Sensitiv ist. Da meine $artikel->title großgeschrieben wird, war ein match nie möglich.

    Habe es nun wie folgt gelöst.

    Somit denke ich , ist das Thema doch erledigt.

  • Code
    if ($absolute_url = "http://Servername/joomla/index.php/orga/intern/uebersicht?view=article&id=" . ($artikel->id) . "&catid=24") : ?>

    Dieser Code aus #1 und #4 kann nicht wie gewünscht funktionieren weil in der if abfrage nur = ist anstatt == somit wird der Variablen $absolute_url der Wert nach dem einfachen Gleichheitszeichen zugewiesen und die Bedingung ist immer gültig.

    Ist übrigens ein typischer Anfängerfehler und hast du ja nun wohl auch selbst bemerkt.

    Würde aber anstatt der absoluten url nur den query-Teil der url vergleichen da du sonst bei einem Umzug z.B. auf eine andere Domain oder bei https oder Subdomain oder nach local (Xampp) die Funktionalität diesbezüglich verlierst.

    An den query-Teil der URL kommst du z.B. per:

    $uri = Uri::getInstance()->getQuery();

    Eventuell nützlich:

    URLs in Joomla – Joomla! Documentation

    Alternativ:

    manual.joomla.org/docs/general-concepts/input/

    Code
    use Joomla\CMS\Factory;
    
    $app   = Factory::getApplication();
    $input = $app->getInput()->server->get('QUERY_STRING', null ,'STRING');
  • Falls der query-Teil der URL noch zu unspezifisch ist kannst du natürlich auch noch den path-Teil ergänzen.

    Entsprechend passend zu deinem Code z.B.:

    Code
     $uri     = Uri::getInstance();
     $absolute_url = $uri->toString(array('path','query'));

    oder z.B.:

    Code
    $uri     = Uri::getInstance();
    $absolute_url = $uri->getPath() . '?' . $uri->getQuery();