Contao-Camp 2024
Ergebnis 1 bis 22 von 22

Thema: tl_calendar_events mit MM verknüpfen DCA Frage

  1. #1
    Contao-Fan
    Registriert seit
    20.10.2014.
    Ort
    Freiburg
    Beiträge
    470

    Standard tl_calendar_events mit MM verknüpfen DCA Frage

    Hallo zusammen,

    habe tl_calendar_events mit MM über ein Select verknüpft.

    Nun möchte ich aber das im Auswahlfeld neben dem Attribut "name" noch das Attribut "Stadt" in Klammern erscheint.

    Also Name (Stadt)

    PHP-Code:
    $options[$items->getItem()->get('id')] = $items->getItem()->get('name'); 
    Kann mir jemand auf die Sprünge helfen bzw. link schicken wo ich solche grundlegenden Dinge nachlesen kann?

    Besten Dank

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

    Standard

    Wo hast du Was Wie gemacht?

  3. #3
    Contao-Fan
    Registriert seit
    20.10.2014.
    Ort
    Freiburg
    Beiträge
    470

    Standard

    Zitat Zitat von zonky Beitrag anzeigen
    Wo hast du Was Wie gemacht?
    Habe die DCA von tl_calendar_events wie folgt angepasst

    PHP-Code:
    $GLOBALS['TL_DCA']['tl_calendar_events']['fields']['eventLocation'] = array ( 
        
    'label'            => &$GLOBALS['TL_LANG']['tl_calendar_events']['eventLocation'], 
        
    'exclude'          => true
        
    'inputType'        => 'select'
        
    'options_callback' => function () { 
            global 
    $container

            
    /** @var MetaModels\IMetaModelsServiceContainer $serviceContainer */ 
            
    $serviceContainer $container['metamodels-service-container']; 
            
    $metaModel        $serviceContainer->getFactory()->getMetaModel('mm_event_locations'); 
            
    $options          = []; 

            
    $items $metaModel->findByFilter(null); 
            while (
    $items->next()) { 
                
    $options[$items->getItem()->get('id')] = $items->getItem()->get('name');
            } 

            return 
    $options
        }, 
        
    'eval'             => [ 
            
    'tl_class'           => 'w50'
            
    'chosen'             => true
            
    'includeBlankOption' => true
        ], 
        
    'sql'              => "varchar(255) NOT NULL default ''"
    ); 
    Jetzt möchte ich aus "mm_event_locations" noch die Stadt (Attribut "stadt") hinter den Einträgen siehe Screenshot anzeigen.

    Bildschirmfoto 2022-05-13 um 19.52.43.png

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

    Standard

    so ggf.

    PHP-Code:
    <?php

    $GLOBALS
    ['TL_DCA']['tl_calendar_events']['fields']['eventLocation'] = [
        
    'label'            => &$GLOBALS['TL_LANG']['tl_calendar_events']['eventLocation'],
        
    'exclude'          => true,
        
    'inputType'        => 'select',
        
    'options_callback' => function () {
            
    $modelName 'mm_event_locations';
            
    $factory   $this->getContainer()->get('metamodels.factory');
            
    $model     $factory->getMetaModel($modelName);
            
    $filter    $model->getEmptyFilter();
            
    $items     $model->findByFilter($filter'location');

            
    $options = [];

            foreach (
    $items as $item) {
                
    $options[$item->get('id')] = \sprintf('%s [%s]'$item->get('name'), $item->get('location'));
            }

            return 
    $options;
        },
        
    'eval'             => [
            
    'tl_class'           => 'w50',
            
    'chosen'             => true,
            
    'includeBlankOption' => true,
        ],
        
    'sql'              => "varchar(255) NOT NULL default ''",
    ];
    siehe https://metamodels.readthedocs.io/de....html#beispiel

    Besser wäre es sicher, eine Klasse beim Callback einzubinden und bei der die Factory als Service zu übergeben.

    da Name und Ort s.g. "simple attributes" sind, hätte eine "Standard-DCA-Relation" sicher ausgereicht https://docs.contao.org/dev/referenc...lds/#relations

  5. #5
    Contao-Fan
    Registriert seit
    20.10.2014.
    Ort
    Freiburg
    Beiträge
    470

    Standard

    Werde ich testen. Sieht etwas anders aus vom Aubau als bei mir.
    Ort ist in dem Fall ein Attribut "Einzelauswahl" auf eine andere mm Tabelle. In mm_event_locations steht in der Spalte nur die ID.
    Melde mich wieder. Danke schonmal.

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

    Standard

    Zitat Zitat von marcohe Beitrag anzeigen
    Ort ist in dem Fall ein Attribut "Einzelauswahl" auf eine andere mm Tabelle.
    dann würdest Du nur die Id bekommen - in dem Fall als Typ 'text' parsen lassen... lass Dir einen Dump ausgeben - dann siehst Du was da ist

  7. #7

  8. #8
    Contao-Fan
    Registriert seit
    20.10.2014.
    Ort
    Freiburg
    Beiträge
    470

    Standard

    Zitat Zitat von zonky Beitrag anzeigen
    dann würdest Du nur die Id bekommen - in dem Fall als Typ 'text' parsen lassen... lass Dir einen Dump ausgeben - dann siehst Du was da ist
    Habe mal deinen Code getestet um zumindest mal die ID zu bekommen.

    Bildschirmfoto 2022-05-14 um 07.24.44.png

    Ergebnis in Anlage

    Ergänzung: Im FE Template hole ich mir
    den Alias mit
    PHP-Code:
    $arrItem['raw']['stadt']['__SELECT_RAW__']['alias'
    Den Name
    PHP-Code:
    $arrItem['text']['stadt'
    Geändert von marcohe (14.05.2022 um 08:05 Uhr)

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

    Standard

    so ggf.

    PHP-Code:
    <?php

    $GLOBALS
    ['TL_DCA']['tl_calendar_events']['fields']['eventLocation'] = [
        
    'label'            => &$GLOBALS['TL_LANG']['tl_calendar_events']['eventLocation'],
        
    'exclude'          => true,
        
    'inputType'        => 'select',
        
    'options_callback' => function () {
            
    $modelName 'mm_event_locations';
            
    $factory   $this->getContainer()->get('metamodels.factory');
            
    $model     $factory->getMetaModel($modelName);
            
    $filter    $model->getEmptyFilter();
            
    $items     $model->findByFilter($filter);
            
    $arrItems  $items->parseAll('text');

            
    $options = [];

    //        foreach ($items as $item) {
    //            $options[$item->get('id')] = \sprintf('%s [%s]', $item->get('name'), $item->get('location'));
    //        }

    // dump($arrItems);
            
    foreach ($arrItems as $arrItem) {
                
    $options[$arrItem['raw']['id']] = \sprintf(
                    
    '%s [%s]',
                    
    $arrItem['text']['name'],
                    
    $arrItem['text']['stadt']
                );
            }

            return 
    $options;
        },
        
    'eval'             => [
            
    'tl_class'           => 'w50',
            
    'chosen'             => true,
            
    'includeBlankOption' => true,
        ],
        
    'sql'              => "varchar(255) NOT NULL default ''",
    ];

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

    Standard

    Zitat Zitat von marcohe Beitrag anzeigen
    Hallo zusammen,

    habe tl_calendar_events mit MM über ein Select verknüpft.
    ... ist die Frage, wenn Du schon mit MM arbeitest, warum Du dann den Kalender nicht komplett in MM machst..??

    so wie hier z. B.

    https://www.naturpark-duemmer.de/nat...skalender.html

    https://www.hauspost.de/veranstaltungen.html

  11. #11
    Contao-Fan
    Registriert seit
    20.10.2014.
    Ort
    Freiburg
    Beiträge
    470

    Standard

    Hatte ich tatsächlich mal überlegt. Vor allem weil mir die Möglichkeit fehlt Schlagwörter für Events zu vergeben.
    Habe dann aber entschieden C Core Module zu nutzen wann immer es geht und nur für das mm zu nehmen was der core nicht abdecken kann. Zudem den Kalender in mm nachzubauen wäre ziemlich aufwendig geworden.

    Aber FAQ werde tatsächlich noch in mm machen da hier das Core Modul zu wenig Funktionsumfang bietet.

    Deinen Code teste ich später noch. Danke schonmal. Wenn alles läuft kann ich auch gerne mal eine Doku dazu schreiben…
    Geändert von marcohe (14.05.2022 um 13:00 Uhr)

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

    Standard

    Zitat Zitat von marcohe Beitrag anzeigen

    A) Hatte ich tatsächlich mal überlegt. Vor allem weil mir die Möglichkeit fehlt Schlagwörter für Events zu vergeben.
    Habe dann aber entschieden C Core Module zu nutzen wann immer es geht und nur für das mm zu nehmen was der core nicht abdecken kann. Zudem den Kalender in mm nachzubauen wäre ziemlich aufwendig geworden.

    B) Aber FAQ werde tatsächlich noch in mm machen da hier das Core Modul zu wenig Funktionsumfang bietet.
    zu A: letztendlich ist es nur die Frage der Darstellung - bei der typischen Kalenderdarstellung (Monat) gibt es ein Script, welches verschachtelte Schleifen für Wochen des Monats, Tage der Woche und je Tag muss dann eben der/die Event(s) rein, wenn vorhanden... kann man sich bei Contao abgucken - gibt aber auch etliche Darstellungen per JS

    zu B: ja, auch schon häufiger gemacht... das ist recht einfach - auch News, Slider u.ä. Sachen per MM gebaut

  13. #13
    Contao-Fan
    Registriert seit
    20.10.2014.
    Ort
    Freiburg
    Beiträge
    470

    Standard

    Bildschirmfoto 2022-05-14 um 13.59.30.png
    So stelle ich mir das vor. Das du mal fertigen Code lieferst? Was los
    1000 Dank.

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

    Standard

    Zitat Zitat von marcohe Beitrag anzeigen
    Bildschirmfoto 2022-05-14 um 13.59.30.png
    So stelle ich mir das vor. Das du mal fertigen Code lieferst? Was los
    1000 Dank.
    hab auch mal Tage ohne pädagogischen Anspruch ;-)

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

    Standard

    PS: gerade noch Dein Screenshot gesehen...

    Würde noch Filter einbauen und nach Stadt und dann Name sortieren und die Städtenamen als Gruppierung in den Options verwendet

    Den Code darfst Du wieder selber machen - steht alles im Handbuch ;-)

  16. #16
    Contao-Fan
    Registriert seit
    20.10.2014.
    Ort
    Freiburg
    Beiträge
    470

    Standard

    Zitat Zitat von zonky Beitrag anzeigen
    PS: gerade noch Dein Screenshot gesehen...

    Würde noch Filter einbauen und nach Stadt und dann Name sortieren und die Städtenamen als Gruppierung in den Options verwendet

    Den Code darfst Du wieder selber machen - steht alles im Handbuch ;-)
    Ne reicht erstmal. Das Handbuch werd ich noch oft genug brauchen ;-)

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

    Standard

    Zitat Zitat von zonky Beitrag anzeigen
    zu A: letztendlich ist es nur die Frage der Darstellung - bei der typischen Kalenderdarstellung (Monat) gibt es ein Script, welches verschachtelte Schleifen für Wochen des Monats, Tage der Woche und je Tag muss dann eben der/die Event(s) rein, wenn vorhanden...
    siehe hier z. B. https://github.com/contao/calendar-b....html5#L16-L29 + https://github.com/contao/calendar-b...endar.php#L223

  18. #18
    Contao-Fan
    Registriert seit
    20.10.2014.
    Ort
    Freiburg
    Beiträge
    470

    Standard

    Danke für den Nachtrag. Nutzte halt auch noch calendar_extended weil ich die erweiterten Wiederholungen mit Ausnahmen brauche z.B. Feiertag. Das wird mir zu komplex und letztlich fehlen mir die erforderlichen Kenntnisse.

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

    Standard

    wenn man "on the fly" mögliche Events aus vorhanden Events berechnen muss, ist das schon teilweise ein hartes Brot - insbesondere wenn die Sachen gefiltert oder gesucht werden sollen...

    Bei den Beispielen bin ich einen etwas anderen Weg gegangen - jedes Event (also den eigentlichen Termin) gibt es "in Echt" in der Datenbank.

    Dazu gibt es bei dem MM-Event zwei MCW für Wiederholungen und Ausnahmen in der Maske - beim Speichern werden in einer Kind-Tabelle (MM-Termine) die entsprechenden Termine automatisch angelegt/abgeglichen/gelöscht.

    Beim Löschen eines Events werden natürlich die Kinder mit gelöscht (macht der DCG).

    Damit kann man in MM dann easy über die Tabelle MM-Termine loopen und Filtern und Suchen.

  20. #20
    Contao-Fan
    Registriert seit
    20.10.2014.
    Ort
    Freiburg
    Beiträge
    470

    Standard

    Zitat Zitat von zonky Beitrag anzeigen
    wenn man "on the fly" mögliche Events aus vorhanden Events berechnen muss, ist das schon teilweise ein hartes Brot - insbesondere wenn die Sachen gefiltert oder gesucht werden sollen...

    Bei den Beispielen bin ich einen etwas anderen Weg gegangen - jedes Event (also den eigentlichen Termin) gibt es "in Echt" in der Datenbank.
    Aber nehmen wir an du hast die Wiederholungen, wie bei mir für die nächsten 5 Jahre festgelegt, dann ergibt das bei EINEM, sich wöchentlich wiederholenden Event 260 Zeilen in der Datenbank.

    Problem erkannt?

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

    Standard

    Zitat Zitat von marcohe Beitrag anzeigen
    Aber nehmen wir an du hast die Wiederholungen, wie bei mir für die nächsten 5 Jahre festgelegt, dann ergibt das bei EINEM, sich wöchentlich wiederholenden Event 260 Zeilen in der Datenbank.

    Problem erkannt?
    260 Zeilen in einer DB sind eher nicht das Problem - kann man gucken, wie lange sowas "archiviert" werden muss und ggf. auch automatisch löschen...

    Wenn Du in einer DB auf etwas Filtern oder Suchen sollst was es "gar nicht gibt", wirds interessant... Problem erkannt? ;-)

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

    Standard

    btw: wenn jemand mal sowas aufbauen möchte: es gibt den "ParentFilter" mit dem die Kinddaten nach Eigenschaften des Elternelements gefiltert/gesucht werden können.

    Damit müssen nicht wie bei den MM-Varianten alle Infos mit in die Kinddaten.

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
  •