Ergebnis 1 bis 28 von 28

Thema: Details von Verknüpftem Item ausgeben

  1. #1
    Contao-Urgestein
    Registriert seit
    07.04.2010.
    Ort
    Stuttgart
    Beiträge
    2.733
    User beschenken
    Wunschliste

    Standard Details von Verknüpftem Item ausgeben

    Hallo ihr,

    Ich möchte nun eine Eine Liste von Items ausgeben.
    Diese Liste hat eine Verknüpfte Tabell (mittels Checkboxen wurden hier Einträge zugeordnet).

    Im Frontend habe ich nun den Namen des verknüpften Items als Liste. Was habe ich vergessen dass ich jetzt noch das zugehörige Bild des verknüpften Items ausgeben kann.
    Ich habe ja kein Rendersetting für verknüpfte Elemente ausgewählt.

    Kann mir jemand die Bretter vor den Augen wegnehmen?
    Viele Dank

    Gruß
    Patrick

  2. #2
    Contao-Urgestein Avatar von Tim G
    Registriert seit
    13.02.2010.
    Ort
    Lübeck
    Beiträge
    2.210
    User beschenken
    Wunschliste

    Standard

    Anhand der ID des verknüpften items, die sollte ja mit der Checkbox geliefert werden sollte, kannst du eigentlich im Template alles abfragen.

    $objItem = MetaModelFactory::byId(MY_METAMODEL_ID)->findById(MY_ITEM_ID);
    http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

  3. #3
    Contao-Nutzer Avatar von timbec
    Registriert seit
    22.09.2009.
    Ort
    Aachen
    Beiträge
    150
    Partner-ID
    7828
    User beschenken
    Wunschliste

    Standard

    Hallo psren,

    schau mal ob dir das hier: https://community.contao.org/de/show...l=1#post270084
    oder das hier: https://gist.github.com/tim-bec/5711512 hilft.

    Grüße
    Tim

  4. #4
    Contao-Urgestein Avatar von Tim G
    Registriert seit
    13.02.2010.
    Ort
    Lübeck
    Beiträge
    2.210
    User beschenken
    Wunschliste

    Standard

    Perfekt, da steht eigentlich alles.
    http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

  5. #5
    Contao-Nutzer Avatar von luis
    Registriert seit
    08.08.2011.
    Ort
    Zürich
    Beiträge
    110

    Standard

    Zitat Zitat von Tim G Beitrag anzeigen
    $objItem = MetaModelFactory::byId(MY_METAMODEL_ID)->findById(MY_ITEM_ID);
    Ich habe 2 MMs: mm_projects und mm_customers. In mm_projects gibt es das Attribut 'customer' vom Typ 'select'. In der DB wird bei der Verknüpfung die Kunden-ID eingetragen. Ich möchte nun im BE eine Kundenliste mit den dazugehörigen Projektnamen ausgeben. Methode findById() greift hier nicht. Ich müsste das Feld 'customer' aufrufen und die Kunden-Id ($arrItem) übergeben können. Welche Methode und Parameter wären da die richtigen?
    PHP-Code:
    <?php foreach ($this->data as $arrItem): ?>
    <div class="item">
    <?php 
    $objItems
    =MetaModelFactory::byTableName('mm_projects')->find?????('customer'$arrItem['raw']['id']);
    ?>
    <div class="inside">
      <h3><?php echo $arrItem['text']['customer'].' (ID: '.$arrItem['raw']['id'].')'?></h3>
      <?php if ($objItems): ?>
      <p><?php echo $objItems->get('project_name'); ?><p>
      <?php endif; ?>
    </div>
    </div>
    <?php endforeach; ?>
    Geändert von luis (21.06.2013 um 12:15 Uhr)

  6. #6
    Maintainer Avatar von xtra
    Registriert seit
    02.07.2009.
    Ort
    Tuebingen
    Beiträge
    2.007
    User beschenken
    Wunschliste

    Standard

    Meinst du das?
    PHP-Code:
    <?php foreach ($this->data as $arrItem): ?>
    <div class="item">
    <?php 
    $objMetaModel 
    MetaModelFactory::byTableName('mm_projects');
    $objFilter $objMetaModel->getEmptyFilter();
    $objFilter->addFilterRule(new MetaModelFilterRuleSearchAttribute($objMetaModel->getAttribute('customer')));
    $objItems=$objMetaModel->findByFilter($objFilter);
    ?>
    <div class="inside">
      <h3><?php echo $arrItem['text']['customer'].' (ID: '.$arrItem['raw']['id'].')'?></h3>
      <?php if ($objItems): ?>
      <p><?php echo $objItems->get('project_name'); ?><p>
      <?php endif; ?>
    </div>
    </div>
    <?php endforeach; ?>
    Bedenke stets: Wenn Du ungenaue oder unzureichende Angaben machst, so koennte dies die Bearbeitung deiner Frage endlos verzoegern (oder sogar dazu fyhren, dass ich zu viel nachdenken muss und die Antwort vergesse!). Kein Support per PN.

  7. #7
    Contao-Nutzer Avatar von luis
    Registriert seit
    08.08.2011.
    Ort
    Zürich
    Beiträge
    110

    Standard

    Das wäre Andreas' Ansatz aus diesem Thread. Damit habe ich es auch versucht. Hier müsste ich $objFilter nicht nur das Attribut 'customer' sondern auch den Wert, die Kunden-ID... $arrItem['raw']['id']), mitgegeben. Sonst weiss der Filter doch nicht wonach er suchen muss. Korrekt?
    Mein Versuch sah so aus:
    PHP-Code:
    <?php foreach ($this->data as $arrItem): ?>
    <div class="item">
    <?php 
    $objMetaModel
    =MetaModelFactory::byTableName('mm_projects'); 
    $objFilter $objMetaModel->getEmptyFilter(); 
    $objFilter->addFilterRule(new MetaModelFilterRuleSearchAttribute($objMetaModel->getAttribute('customer'), $arrItem['raw']['id']));
    $objItems=$objMetaModel->findByFilter($objFilter); 
    ?>
      <div class="inside">
        <h3><?php echo $arrItem['text']['customer'].' (ID: '.$arrItem['raw']['id'].')'?></h3>
        <?php if ($objItems): ?>
        <p><?php echo $objItems->getItem()->get('project_name'); ?><p>
        <?php endif; ?>
      </div>
    </div>
    <?php endforeach; ?>
    Das generierte mir aber immer folgende Error-Meldung:
    HTML-Code:
    <h3>Beck Automation AG (ID: 21)<h3>
    Fatal error: Call to a member function get() on a non-object in /Applications/MAMP/htdocs/guay/templates/metamodel_Liste_Kunden.html5 on line 13

  8. #8
    Contao-Fan
    Registriert seit
    27.06.2012.
    Beiträge
    600

    Standard

    Bei mir funktioniert die Ausgabe 1:1 auf mein MM angewendet, was steht in $objItem?

  9. #9
    Contao-Nutzer Avatar von luis
    Registriert seit
    08.08.2011.
    Ort
    Zürich
    Beiträge
    110

    Standard

    Hm... wenn ich die Fehlermeldung richtig interpretiere, dann findet
    PHP-Code:
    $objItems->getItem()->get('project_name'); 
    offensichtlich kein Objekt (sprich: Projekt), dass in diesem Fall zum Kunden mit der ID 21 passt. Im Backend existiert aber ein Projekt, dass diesem Kunden zugeordnet ist. Oder folgende Anweisung
    PHP-Code:
    $objFilter->addFilterRule(new MetaModelFilterRuleSearchAttribute($objMetaModel->getAttribute('customer'), $arrItem['raw']['id'])); 
    stimmt nicht.

    Wo ist mein Denkfehler?

  10. #10
    Contao-Fan
    Registriert seit
    27.06.2012.
    Beiträge
    600

    Standard

    Eventuell ist es nicht die ID sondern ein anderes Feld mit dem du das 2. MM verknüpfst?

    Ich erhalte die Fehlermeldung, wenn der Wert des Attributes falsch ist. Tipp mal händisch die ID von einem Eintrag aus mm_projects ein.

  11. #11
    Contao-Nutzer Avatar von luis
    Registriert seit
    08.08.2011.
    Ort
    Zürich
    Beiträge
    110

    Standard

    Wie schon gesagt, im mm_projects gibt es das Attribut 'customer' vom Typ 'select'. In der DB wird bei der Verknüpfung die Kunden-ID eingetragen. Im Backend funtioniert alles prima. Wie du im screenshot sehen kannst ist das Feld 'customer' in der DB-Tabelle mm_projects vom Typ 'Integer', und dort stehen auch die richtigen Kunden-IDs.
    mm_tabellen.png
    Habs auch schon mit einer festen ID versucht. Klappt auch nicht.

  12. #12
    Contao-Nutzer Avatar von cemplusm
    Registriert seit
    01.02.2013.
    Beiträge
    49

    Standard gleiches Problem

    @luis: danke

    Ich kämpfe mit dem selben Problem. Ich bekomme keine matchingID´s vom Filter zurück. Datenbank und die 2 Parameter sind richtig eingetragen. Wie kann es sein, dass es bei manchen funktioniert und bei anderen wiederum nicht?

  13. #13
    Contao-Urgestein Avatar von Tim G
    Registriert seit
    13.02.2010.
    Ort
    Lübeck
    Beiträge
    2.210
    User beschenken
    Wunschliste

    Standard

    Genau den Eintrag von xtra lesen!

    $objItems=$objMetaModel->findByFilter($objFilter); // liefert bereits das MM object!

    $objItems->getItem()->get('project_name');
    Dieses beinhaltet keine public function ->getItem(); Daher dein php-Fehler!

    PHP-Code:
    $objItems->get('project_name'); 
    Liefert den Wert aus dem Feld.
    Geändert von Tim G (26.06.2013 um 09:26 Uhr)
    http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

  14. #14
    Contao-Nutzer Avatar von cemplusm
    Registriert seit
    01.02.2013.
    Beiträge
    49

    Standard

    Hallo Tim,

    ich bekomme folgende Fehlermeldung beim Versuch mit get()

    Code:
    Fatal error: Call to undefined method MetaModelItems::get()
    Mit getItem() bekomme ich die Fehlermeldung, dass $objItems leer ist. Wenn ich mir objItems ausgebe, dann sehe ich dass kein Wert zurückkommt.

    PHP-Code:
    $objMetaModel MetaModelFactory::byTableName('mm_pauschalen');
    $objFilter $objMetaModel->getEmptyFilter();
    $objFilter->addFilterRule(new MetaModelFilterRuleSearchAttribute($objMetaModel->getAttribute('region_pauschalen'), $arrItem['raw']['region']['id'], $objMetaModel->getAvailableLanguages()));
    $objItems $objMetaModel->findByFilter($objFilter); 
    echo 
    $objItems->get("title"); 
    Vielen Dank

  15. #15
    Contao-Urgestein Avatar von Tim G
    Registriert seit
    13.02.2010.
    Ort
    Lübeck
    Beiträge
    2.210
    User beschenken
    Wunschliste

    Standard

    $objMetaModel->findByFilter($objFilter); liefert wirklich ein Objekt vom Typ MetaModelItems zurück nicht MetaModelItem. Daher gibt es ->getItem(). Der interne Pointer sollte durch den Filter vorher auf das aktuelle Item gesetzt sein, nehme ich an.
    Jetzt ist natürlich die Frage ob das return-Objekt leer oder null ist. Da ist natürlich ein Unterschied. Ich tippe auf leere Werte in der Datenbank. Einfach falsch verknüpft oder nicht gespeichert.
    Vielleicht fällt Andreas noch was ein. Sein Thread beschreibt ja das gleiche Phänomen.
    http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

  16. #16
    Contao-Urgestein
    Registriert seit
    07.07.2009.
    Beiträge
    4.107

    Standard

    Mit der ID kann man derzeit keine Datensätze aus anderen MetaModels ziehen. Es geht nur mit dem Alias. Warum das so ist weiß derzeit leider xtra, da muss ich passen. Aber hier mal ein Code der funktioniert. Den packt ihr am besten ganz oben in das Template:

    PHP-Code:
    <?php 
    function getInformationFromTable($strAlias$format='html5')
    {
        
    $objMetaModel MetaModelFactory::byTableName('mm_xxx');
        
    $objFilter $objMetaModel->getEmptyFilter();
        
    $objFilter->addFilterRule(new MetaModelFilterRuleSearchAttribute($objMetaModel->getAttribute('xxx'), $strAlias$objMetaModel->getAvailableLanguages()));
        
    $objFilter->addFilterRule(new MetaModelFilterRuleSearchAttribute($objMetaModel->getAttribute('published'), true$objMetaModel->getAvailableLanguages()));
        
    $objItems $objMetaModel->findByFilter($objFilter);
        return 
    $objItems->parseAll($format$objMetaModel->getView(3)); // die 3 ist die ID des Rendersettings was man für die verknüpften Elemente nutzen möchte
    }
    ?>
    Verwenden könnt ihr das dann weiter im Template mit den folgenden Zeilen:

    PHP-Code:
    <?php foreach (getInformationFromTable($arrItem['raw']['alias']) as $arrInformation): ?>
        <?php if(!empty($arrProjects['raw']['images'])): ?>
            <a href="<?php echo $arrInformation['jumpTo']['url']; ?>"><?php echo $arrInformation[$this->getFormat()]['name']; ?></a>
        <?php echo $arrInformation[$this->getFormat()]['images']; ?>
        <?php endif; ?>
    <?php 
    endforeach; ?>
    Wenn ihr noch Fragen dazu habt, einfach löchern. Wir versuchen zu helfen.

  17. #17
    Contao-Nutzer
    Registriert seit
    25.06.2009.
    Beiträge
    119

    Standard

    Hallo Andreas,

    ich werde daraus (und hieraus) echt nicht schlau bzw. bekomme es nicht hin. Entweder gibt's Fatals oder leere Dumps.

    Mein Aufbau ist ist so, mit 2 MM:

    mm_categories
    - category_title
    - category_description
    - category_description_short
    - category_images
    - category_alias

    mm_projects (nur relevante Felder)
    - project_title
    - project_description
    - project_category (-> Select auf mm_categories)
    - project_alias

    ein Projekt wird einer Kategorie zugeordnet, ein völlig banaler Anwendungsfall.

    Jetzt will ich aber folgenden Pfad im Frontend erreichen:

    1. Kategorie-Liste (zeigt MetaModelList mit category_title, category_description_short, category_images[0] + Detail-Link)
    2. Kategorie-Detail (zeigt MetaModelList Kategorie-Detail mit category_title, category_description_short, category_images + weitere MetaModelList zugehörige Projekt-Liste project_title + Detail-Link)
    3. Projekt-Detailansicht (zeigt MetaModelList mit project_title, project_description + diverse andere Felder)

    1. und 3. sind kein Problem, lediglich 2. bereitet mir Kopfschmerzen. Mein Problem: wie verknüpfe ich die ausgewählte Kategorie mit den zugehörigen Projekten? Ginge das rein über Filter? Eigentlich kann ein Filter ja nur in einem MM agieren ...

    Ist das nachvollziehbar?
    Geändert von datenkind (06.09.2013 um 15:27 Uhr)

  18. #18
    Contao-Urgestein
    Registriert seit
    07.07.2009.
    Beiträge
    4.107

    Standard

    Ich hab grad ein Knotem im Hirn nachdem ich deinen Beitrag durchgelesen habe ^^ kannst du das nicht vielleicht etwas visualisieren oder mir das Projekt zeigen?

  19. #19
    Contao-Nutzer
    Registriert seit
    25.06.2009.
    Beiträge
    119

    Standard

    Hihi, sorry für den Knoten.

    Im Anhang hab ich das ganze mal visualisiert.

    Allerdings habe ich jetzt eine leider unflexible, dafür pragmatische Lösung genommen: Ich habe pro Kategorie eine fixe Seite angelegt, worauf ich einen Filter pro Seite liegen habe, der die abgefragte Kategorie anpasst. Dabei musste ich jedoch pro Kategorie auch eine eigene Rendereinstellung geniereren, da ich eine Detailseite pro Kategorie brauchte. Ich brauche die Kategorie-Überschrift im Breadcrumb.
    Angehängte Grafiken Angehängte Grafiken

  20. #20
    Contao-Urgestein Avatar von Tim G
    Registriert seit
    13.02.2010.
    Ort
    Lübeck
    Beiträge
    2.210
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von datenkind Beitrag anzeigen
    Hihi, sorry für den Knoten.

    Im Anhang hab ich das ganze mal visualisiert.

    Allerdings habe ich jetzt eine leider unflexible, dafür pragmatische Lösung genommen: Ich habe pro Kategorie eine fixe Seite angelegt, worauf ich einen Filter pro Seite liegen habe, der die abgefragte Kategorie anpasst. Dabei musste ich jedoch pro Kategorie auch eine eigene Rendereinstellung geniereren, da ich eine Detailseite pro Kategorie brauchte. Ich brauche die Kategorie-Überschrift im Breadcrumb.
    Das sollte eigentlich sogar ohne viel Programmierung abdeckbar sein. (Mit der Seitenstruktur wäre es sogar am leichtesten, weil die pageID als Inserttag vorliegt)
    Die jeweiligen Select oder Tag-Attribute hast Du ja bereits. Wenn Du deinen "Weiterlesen", "Projekte" oder Detaillinks, (wie auch immer) einen kleinen GET Parameter spendierst mit z.B. der ID der jeweiligen Auswahl, kannst Du einen SQL-Filter für die jeweiligen Unterkategorien aufsetzen. Die Werte in der Session ablegen würde auch gehen, wenn man die URL nicht mit GETs zu kleben will
    Der würde so aussehen:
    Code:
    SELECT mm.* FROM {{table}} AS mm WHERE mm.id IN
    (
    SELECT tag.item_id 
    FROM tl_metamodel_tag_relation AS tag 
    WHERE tag.value_id=MY-VALUE GROUP BY tag.item_id
    )
    MY-VALUE wäre hier die ID der gewählten Option. Da müsste der GET-Parameter einfach rein.

    Bei z.B. einem Attribute Tags mit Quelle der Seitenstruktur wäre das so lösbar:
    Code:
    SELECT mm.* FROM {{table}} AS mm WHERE mm.id IN
    (
    SELECT tag.item_id 
    FROM tl_metamodel_tag_relation AS tag 
    WHERE tag.value_id={{page::id}} GROUP BY tag.item_id
    )
    Geändert von Tim G (09.09.2013 um 16:36 Uhr)
    http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

  21. #21
    Contao-Urgestein
    Registriert seit
    07.07.2009.
    Beiträge
    4.107

    Standard

    lol genau das habe ich erst vor einiger Zeit für jemand anderen in MetaModels umgesetzt. Nur waren es da keine Kategorien sondern Kunden und keine Details sondern Projekte des Kunden. Aber strukturell 1:1 das gleiche Schema. Ich würde dir am liebsten mal die Liveseite zeigen, muss aber erst prüfen ob der gute Mann die Website schon live geschaltet hat. Dann könnt ihr euch mal kurzschließen. Das geht relativ einfach mit 9-10 Zeilen im Template und keiner Datenbankabfrage.

  22. #22
    Contao-Nutzer Avatar von luis
    Registriert seit
    08.08.2011.
    Ort
    Zürich
    Beiträge
    110

    Standard

    Der gute Mann war fleissig und die Seite ist live: www.guay.ch ;-)

  23. #23
    Contao-Nutzer Avatar von luis
    Registriert seit
    08.08.2011.
    Ort
    Zürich
    Beiträge
    110

    Standard Wiki-Doku


  24. #24
    Contao-Nutzer
    Registriert seit
    03.07.2014.
    Beiträge
    80

    Standard

    ich habe mich schon durch diverse threads gekämpft und irgendwie will die verknüpfung nicht funktionieren...

    ich habe 2 tabellen...

    mm_projekte
    projekt_id
    name
    ...

    mm_bilder
    bild_id
    projekt_id (select auf mm_projekte)
    pfad (dateityp file)
    bildunterschrift
    ...

    jedes projekt kann mehrere Bilder haben mit eigenen Bildunterschriften.

    ich habe das Beispiel aus dem wiki versucht zuverwenden aber irgendwie bekomm ich nur fatalerrors oder exceptions...

    function getProjectsByCustomer($strAlias, $format='html5')
    {
    $objMetaModel = \MetaModels\Factory::byTableName('mm_bilder');
    $objFilter = $objMetaModel->getEmptyFilter();
    $objFilter->addFilterRule(new \MetaModels\Filter\Rules\SearchAttribute($objMetaM odel->getAttribute('projekt_id'), $strAlias, $objMetaModel->getAvailableLanguages()));
    $objItems = $objMetaModel->findByFilter($objFilter);
    return $objItems->parseAll($format, $objMetaModel->getView());
    }

    <?php foreach (getProjectsByCustomer($arrItem['raw']['projekt_id']) as $arrProjects): ?>
    <?php if(!empty($arrProjects['raw']['pfad'])): ?>
    <?php echo $arrProjects[$this->getFormat()]['pfad']; ?>
    <?php endif; ?>
    <?php endforeach; ?>


    hilfe! was mache ich falsch?

    danke und lg

  25. #25
    Contao-Nutzer
    Registriert seit
    03.07.2014.
    Beiträge
    80

    Standard

    Was genau ist der Fehler?

    Bitte helft mir!

    Danke.

  26. #26
    Contao-Yoda Avatar von MacKP
    Registriert seit
    15.06.2009.
    Ort
    Duisburg
    Beiträge
    13.292
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Wie lautet denn die genaue Fehlermeldung?

    Und bitte beim nächsten mal den Code in einen Code Block einfügen, dann kann man das besser lesen ;-)

    Viele Grüße
    Contao Pool | C-C-A | MetaModels | [Internetseite -> Mediendepot Ruhr]
    [Arbeitet bei -> Paus Design & Medien]
    "I can EXPLAIN it to you, but I can't UNDERSTAND it for you."

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

    Standard

    Zitat Zitat von mc_fausti Beitrag anzeigen

    hilfe! was mache ich falsch?

    erster Fehler: Quelltext nicht in "Quelltext-Tag" gepackt - siehe in den Ions das mit "PHP"

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

    Standard

    Zitat Zitat von mc_fausti Beitrag anzeigen
    ich habe mich schon durch diverse threads gekämpft und irgendwie will die verknüpfung nicht funktionieren...

    ich habe 2 tabellen...

    mm_projekte
    projekt_id
    name
    ...

    mm_bilder
    bild_id
    projekt_id (select auf mm_projekte)
    pfad (dateityp file)
    bildunterschrift
    ...

    jedes projekt kann mehrere Bilder haben mit eigenen Bildunterschriften.
    ich würde mal sagen, hier stimmt die Logik nicht

    m.E. willst Du mm_projekte -- 1:n --> mm_bilder haben - also ein Projekt hat eine Relation zu einem oder mehreren Bildern - ergo in mm_projekte eine Mehrfachauswahl auf Bilder (nennt sich tags)

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
  •