Artikel mit mehreren Feldern auslesen

  • Hallo Joomla-Community,

    ich habe hier gerade ein Problem: Mittels dieses hervorragenden Blogbeitrags zum Thema (vielen Dank an firstlady!) weiß ich nun, wie ich eine Liste Artikel erstelle mit einem verknüpften Custom Field. Jetzt würde ich gerne mehrere anzeigen (z.B. jeweils zwei verschiedene Custom Field Werte, die zum selben Artikel gehören) und stoße auf das Problem, dass ich dem Tabellenfeld fieldvalues.value unterschiedliche (Alias-)Namen geben muss je nach FeldID, damit sie sich im Ergebnis nicht überschreiben, sondern dann hübsch einzeln über das Ergebnis-Objekt-Array verwenden lassen. Geht das überhaupt noch in einer DB-Abfrage? Oder wie geht man da ran?


    Wäre super, wenn mir einer von den erfahreneren hier auf die Sprünge helfen könnte!

    Vielen Dank im Voraus! beer

  • Ja, das geht, man kann ja beliebig viele Tabellen in einem Select verknüpfen.


    Disclaimer - das folgende ist kein funktionierender Code, nur ein Denkanstoß.


  • Hallo Christiane,

    vielen Dank für deine Antwort. Deinen Code kann ich nachvollziehen, und bin nach ein paar Stündchen probieren und recherchieren schon deutlich weiter gekommen.


    Habe nach einigem Suchen $query->__toString() gefunden um mal zu schauen, was die Klasse da eigentlich so bastelt. Dabei ist mir aufgefallen, dass sie bei deinem Code einfach bei FROM direkt beide #__fields_values hinschreibt, also komplett ohne Join. Habe dann das zweite ->from gelöscht und das zweite ->join statt noch mal mit #__content umgebaut zu "'#__fields_values', 'fv2'". Der Query von ->__toString scheint mir nun logischer und liefert auch die richtigen Ergebnisse.


    Einziges verbleibendes Problem ist, dass es nur Ergebnisse liefert, wo beide Felder einen Wert enthalten. 'key2' soll aber optional sein. Wie bekomme ich es hin, dass auch Zeilen angezeigt werden, wo kein 'key2' existiert? Left- und rightjoin helfen beide nicht (warum? Sind die nicht genau dafür da?), outerjoin gibt einen SQL-Syntax-Error (Joomla-Bug oder muss ich da in der übergebenen Bedingung tatsächlich etwas anpassen?).


    Danke im Voraus an dich oder möglicherweise auch jemand anderen, der sich einklinkt! Wenn jemand noch weitere Codebeispiele möchte, sagt mir gerne was ihr braucht...


    Grüße

    Waldbaer

  • OK, über dem Problem mit den optional auszufüllenden Feldern/Custom Fields habe ich jetzt so einige Stunden gebrütet, gesucht, probiert und mich geärgert, aber es schließlich und tatsächlich hinbekommen.


    Die Lösung ist, kein ->where zum Feld-Filtern zu benutzen, sondern die Bedingung gleich als AND in den join zu bauen. Dann funktionieren auch inner- bzw. left-join wie man es erwarten sollte (bzw. ich es erwartet habe). Die von dir (Christiane) im Tutorial gezeigte und oben angedeutete Variante mit ->where funktioniert grundsätzlich auch, aber eben nur mit Pflichtfeldern, die wiederum auch mit meiner Version gut funktionieren. Der Einheitlichkeit zuliebe würde ich darum meine nehmen.


    Hier ein funktionierender Minimalcode zum Abruf von Artikeltiteln samt zwei Feldern (eins Pflicht, eins optional auszufüllen):