Contao Konferenz 2019 in Duisburg - Call for Papers
Ergebnis 1 bis 13 von 13

Thema: Child-Datensätze in einer Detailansicht anzeigen

  1. #1
    Contao-Nutzer Avatar von Niels H
    Registriert seit
    14.08.2012.
    Ort
    Köln
    Beiträge
    40

    Standard Child-Datensätze in einer Detailansicht anzeigen

    Hallo zusammen,

    ich "hole" mir momentan Einträge einer Child-Tabelle mit folgendem Code in eine Detailansicht:
    HTML-Code:
    $factory = $this->getContainer()->get('metamodels.factory');
    $model = $factory->getMetaModel('mm_comments');
    $filter = $model->getEmptyFilter();
    $items = $model->findByFilter($filter);
    $arrItems = $items->parseAll('text');
    Danach filtere ich mit einer Schleife die Einträge heraus, welche als pid die id der Detailansicht haben.

    HTML-Code:
    <?php foreach ($arrItems as $arrItem): ?>
    <?php if ($parent_id == $arrItem['raw']['pid']): ?>
    ...
    Gibt es eine Möglichkeit direkt im ersten Schritt nur die "passenden" Einträge zu "holen"? Sodass man mit
    HTML-Code:
    echo 'Anzahl: '.$items->getCount()."<br>\n";
    die korrekte Anzahl ausgegeben bekommt?


    Vielen Dank im Voraus für alle Denkanstöße

  2. #2
    Contao-Yoda Avatar von MacKP
    Registriert seit
    15.06.2009.
    Ort
    Duisburg
    Beiträge
    13.105
    User beschenken
    Wunschliste

    Standard

    Hallo Niels H,
    ich würde das mit einer eigenen Ausgabe machen (also Liste) und dann einem passenden Filter.
    Wie das gehen kann ist hier auch gut beschrieben: https://metamodels.readthedocs.io/de...ltern-elements

    Es ist auf jeden Fall sinnvoller, dass direkt so zu lösen, damit eben nicht so viele Elemente im Frontend landen ;-)

    Viele Grüße

  3. #3
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    6.099
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Niels H Beitrag anzeigen
    Gibt es eine Möglichkeit direkt im ersten Schritt nur die "passenden" Einträge zu "holen"?
    ja, indem man den Filter bei der Abfrage per API richtig setzt... ich würde Dir aber auch das Vorgehen wie MacKP beschrieben hat empfehlen - ist im Prinzip das selbe nur mit mehr "GUI-Anteil"

  4. #4
    Contao-Nutzer Avatar von Niels H
    Registriert seit
    14.08.2012.
    Ort
    Köln
    Beiträge
    40

    Standard

    Vielen Dank Ihr beiden. Das hat funktioniert!

    Ich habe folgenden "Eigenes SQL"-Filter angelegt:
    Code:
    SELECT id FROM mm_comments WHERE pid = (
      SELECT id FROM mm_datasets WHERE alias={{param::get?name=auto_item}}
    )
    Und im Template steht jetzt:
    Code:
    $factory = $this->getContainer()->get('metamodels.factory');
    $model = $factory->getMetaModel('mm_comments');
    $filter = $model->prepareFilter('14',$arrFilterUrl);
    $items = $model->findByFilter($filter);
    $arrItems = $items->parseAll('text');
    Nun würde ich gerne noch in der Listenansicht, wo leider kein {{param::get?name=auto_item}} zur Verfügung steht, die Anzahl der Child-Einträge ausgeben.

    Könnte ich hier mit findById weiterkommen? Im Template kenne ich ja die Parent-ID.
    $items = $model->findById('44'); scheint nicht zu funktionieren.

  5. #5
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    6.099
    User beschenken
    Wunschliste

    Standard

    https://metamodels.readthedocs.io/de...tems-interface

    getCount()
    gibt die Anzahl der Items zurück

  6. #6
    Contao-Nutzer Avatar von Niels H
    Registriert seit
    14.08.2012.
    Ort
    Köln
    Beiträge
    40

    Standard

    Danke für Deine Antwort zonky. getCount() ist mir bekannt, siehe erster Post .

    Ich suche nach einer Möglichkeit die Child-Datensätze in den einzelnen Einträgen der Liste der Parent-Datensätze auszugeben. Mein Ansatz mit $items = $model->findById($meineParentID); scheint nicht zu funktionieren. Auch kann ich ja leider nicht auf {{param::get?name=auto_item}} zugreifen, da es sich ja um eine Liste und nicht um eine Detailansicht handelt.

    In der Liste der Parent-Datensätze würde ich gerne die Anzahl der Child-Datensätze anzeigen lassen. Dazu müsste ich die Child-Datensätze nach der, mir bzw. im Template bekannten, pid filtern. Ich finde nur keinen Ansatz, wie der Filter gesetzt werden kann.

  7. #7
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    6.099
    User beschenken
    Wunschliste

    Standard

    alle Childs zu einem Parent mit ID x haben die PID x - soweit klar...

    mach Dir eine Funktion, in der Du die ID des Parent übergibst und in Child nach "SELECT * FROM <table> WHERE pid = <id>" suchst - id kannst Du dem Filter in der API übergeben oder machst ein SQL

    mit getCount hast Du die Anzahl als return...

    die Funktion wird dann leider bei jedem Parent-Item aufgerufen... ggf. ist es effektiver erst die Anzahl aller Childs per GROUP BY pid abzufragen und in einem "Hilfs-Array" abzulegen - z.B. mit pid als Key

  8. #8
    Contao-Nutzer Avatar von Niels H
    Registriert seit
    14.08.2012.
    Ort
    Köln
    Beiträge
    40

    Standard

    Leider klappt die Übergabe der Parent-ID so nicht.

    Template:
    Code:
    $arrFilterPid = ['pid' => '44'];
    $filter = $model->prepareFilter('15',$arrFilterPid);
    $items = $model->findByFilter($filter);
    Filter "Eigenes-SQL":
    Code:
    SELECT id FROM mm_comments WHERE pid = {{param::get?name=pid}}
    Ich gehe davon aus, dass die Select-Abfrage richtig ist und die Parent-ID im Template anders übergeben werden muss.

  9. #9
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    6.099
    User beschenken
    Wunschliste

    Standard

    Generiere mal einen Fehler

    Code:
    SELECT id FROM mm_comments WHERE pid = {{param::get?name=pid}} xxx
    damit sieht man, was als Query erzeugt wird

  10. #10
    Contao-Nutzer Avatar von Niels H
    Registriert seit
    14.08.2012.
    Ort
    Köln
    Beiträge
    40

    Standard

    Code:
    'SELECT id FROM mm_comments WHERE pid = NULL xxx'
    Ich vermute das hier muss anders gemacht werden:
    Code:
    $arrFilterPid = ['pid' => '44'];
    $filter = $model->prepareFilter('15',$arrFilterPid);
    $items = $model->findByFilter($filter);

  11. #11

  12. #12
    Contao-Nutzer Avatar von Niels H
    Registriert seit
    14.08.2012.
    Ort
    Köln
    Beiträge
    40

    Standard

    Ja, leider ohne Erfolg :/.

    Template:
    Code:
    $arrFilterPid = ['pid' => '44'];
    $filter = $model->prepareFilter('15',$arrFilterPid);
    $items = $model->findByFilter($filter);
    Filter:
    Code:
    SELECT id FROM mm_comments WHERE pid = {{param::filter=pid}}
    Ausgabe:
    Code:
    'SELECT id FROM mm_comments WHERE pid = NULL x'

  13. #13
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    6.099
    User beschenken
    Wunschliste

    Standard

    in der Hilfe steht
    Der Abfragestring wird wie ein normaler HTTP-Query-String als "name=wert"-Paar aufgebaut kann mit dem Zeichen & kombiniert werden und muss mindestens das Feld 'name' enthalten.

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •