Frontend: Daten aus dem Model holen

  • Hallo zusammen,


    ich habe die letzten 2 Jahre damit verbracht, das Backend meiner kleinen Komponente auszubauen. Nun sitze ich am Frontend und stelle fest: Hier läuft einiges doch etwas anders als bisher.


    Scheinbar gibt es für die Einzelansicht von Elementen JModelItem im Frontend nicht? Zumindest parent::getItem() scheint nicht zu funktionieren?


    Wenn ich hier auf JModelList zurück greife, dann muss ich mir natürlich irgendwie die Parameter "holen", die ich benötige, um wirklich nur den passenden Datensatz anzuzeigen.


    Bisher mache ich das wie folgt:


    Code
    protected function populateState($ordering = null, $direction =  null)    {        $id         =     JRequest::getInt('id');        $this->setState('id', $id);        }


    soweit, so gut.


    Nun nutze ich getListQuery:



    Okay, auch das funktioniert, aaaaaaaaber:


    Wenn nun


    &id=


    angegeben wird, erhalte ich natürlich fiese MySQL-Fehler:


    Zitat

    0 SQLSTATE[42000]: Syntax error or access violation: 1065 Query was empty SQLSTATE[42000]: Syntax error or access violation: 1065 Query was empty



    Gibt es da eine elegantere Methode?

  • Zitat

    Scheinbar gibt es für die Einzelansicht von Elementen JModelItem im Frontend nicht?


    Wirf einen Blick in FE model com_content article.php

    Code
    class ContentModelArticle extends JModelItem


    JModelItem ist also vorgesehen.

    Zitat

    Zumindest parent::getItem() scheint nicht zu funktionieren?


    Das ist korrekt, da die Methode nur in JModelAdmin existiert, die im Normalfall wohl nur im BE "extended" wird.

    Code
    abstract class JModelAdmin extends JModelForm


    Nur so dahergefaselt: JModelAdmin laden und "extenden".


    Hast du mal ein Debug
    echo (string) $query;
    gemacht? Kann mich täuschen, aber Zeilen 6-11 des 2. Codes, basteln die ein korrektes SELECT?
    Aber schreibst ja, das funktioniert schon mal.


    Und, wenns tatsächlich nur die ID ist, die den SQL-Fehler erzeugt, musst vorher im Controller abfangen, gar keine Abfrage starten oder behelfsweise.


    Zitat

    $query->where('a.id = ' . (int) $this->getState('id'));


    also if rausnehmen. So hast immer einen Wert, ggf. halt 0.


    Ob das hier was bringt, aber ein Bsp. aus Modulen, die ein "Fremd-Model" nutzen wollen.
    Im Bsp. Frontend-Models articles.php bzw. article.php


    Statt JPATH_SITE JPATH_ADMINISTRATOR setzen? Und als $com_path deine Komponente etc.?