Ergebnis 1 bis 24 von 24

Thema: FEE - select auf tl_member mit member id vorbelegen

  1. #1
    Contao-Fan
    Registriert seit
    20.10.2014.
    Beiträge
    485

    Standard FEE - select auf tl_member mit member id vorbelegen

    Hallo zusammen,
    wie kann ich im FEE das SELECT auf tl_member automatisch mit der id des aktuell angemeldeten Mitglieds vorbelegen?
    https://metamodels.readthedocs.io/de...lt-values.html hab ich gesehen aber hier kann ich nicht mit Inserttags {{user::id}} arbeiten.
    Für Denkanstöße bin ich dankbar.

  2. #2
    Contao-Urgestein Avatar von cliffparnitzky
    Registriert seit
    08.10.2010.
    Ort
    Lüneburg
    Beiträge
    2.451
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Statt Inserttag vlt. hiermit versuuchen: FrontendUser::getInstance()->id

  3. #3
    Contao-Fan
    Registriert seit
    20.10.2014.
    Beiträge
    485

    Standard

    Der vollständigkeit halber..
    PHP-Code:
    $GLOBALS['TL_DCA']['mm_events']['fields']['author'] = [ 
        
    'author' => array
            (
                
    'default'                 => static fn () => FrontendUser::getInstance()->id,
                
    'sql'                     => "int(10) unsigned NOT NULL default 0"
            
    ),
    ]; 

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

    Standard

    bin etwas irritiert, dass Du da ein Array übergibst ... hätte mit sowas gerechnet

    PHP-Code:
    <?php
    // contao/dca/mm_events.php
    if (FrontendUser::getInstance()) {
        
    $GLOBALS['TL_DCA']['mm_events']['fields']['author']['default'] = static fn() => FrontendUser::getInstance()->id;
    }
    PS: Prüfung auf FE wäre angebracht.

    Alternativ kannst Du mit dem PreEditModelEvent die Eigenschaften einer Property beeinflussen. MM-Vortrag Folie #25

  5. #5
    Contao-Fan
    Registriert seit
    20.10.2014.
    Beiträge
    485

    Standard

    Zitat Zitat von zonky Beitrag anzeigen
    bin etwas irritiert, dass Du da ein Array übergibst ... hätte mit sowas gerechnet
    PHP-Code:
    $GLOBALS['TL_DCA']['mm_events']['fields']['author']['default'] = static fn() => FrontendUser::getInstance()->id
    War mein erster Ansatz > mit Fehlermeldung. Mir array hats dann funktioniert

    Zitat Zitat von zonky Beitrag anzeigen
    PS: Prüfung auf FE wäre angebracht.
    Guter Hinweis ist eingebaut! Danke

  6. #6
    Contao-Fan
    Registriert seit
    20.10.2014.
    Beiträge
    485

    Standard FEE - Kindtabelle mit pid vorbelegen

    Passt eigentlich zum noch zum Thema

    Wie könnte ich denn die pid einer Kindtabelle (Elternelement vorhanden) vorbelegen.

    1. überlegung war die ID des Elternteils per URL zu übergeben (....html?id=1) und dann nach dem gleichen Schema rauszufischen

    PHP-Code:
    $GLOBALS['TL_DCA']['mm_kind']['fields']['pid'] = [ 
        
    'pid' => array
            (
                
    'default'                 => $_GET['id'],
                
    'sql'                     => "int(10) unsigned NOT NULL default 0"
            
    ),
    ]; 
    Funktioniert so nicht.

    2. Überlegung war in mm_kind ein select mit Spaltenname pid anzulegen und die pid dann in den Anzeigeeinstellungen per Filter zuzuweisen. Spaltenname pid lässt metamodels aber nicht zu

    Wär ja auch zu einfach gewesen Weitere Tipps bitte!
    Geändert von marcohe (16.11.2023 um 20:45 Uhr)

  7. #7
    Contao-Urgestein Avatar von cliffparnitzky
    Registriert seit
    08.10.2010.
    Ort
    Lüneburg
    Beiträge
    2.451
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Ersetze mal "id" in der URL durch "pid" ... und dann versuch die Vorbelegung mit "Input::get('pid')".

  8. #8
    Contao-Fan
    Registriert seit
    20.10.2014.
    Beiträge
    485

    Standard

    Zitat Zitat von cliffparnitzky Beitrag anzeigen
    Ersetze mal "id" in der URL durch "pid" ... und dann versuch die Vorbelegung mit "Input::get('pid')".
    Dann tut sich zumindest schon mal was, wenn auch mit Fehler.

    Code:
    Uncaught PHP Exception ContaoCommunityAlliance\DcGeneral\Exception\DcGeneralRuntimeException: "Unparsable encoded id value: '1'"
    Welchen Unterschied macht es wenn ich in der URL "pid" statt "id" verwende? Ist doch nur eine Variable?

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

    Standard

    Zitat Zitat von marcohe Beitrag anzeigen
    Wie könnte ich denn die pid einer Kindtabelle (Elternelement vorhanden) vorbelegen.
    Mit dem PrePersistModelEvent - siehe Vortrag CK23.

  10. #10
    Contao-Fan
    Registriert seit
    20.10.2014.
    Beiträge
    485

    Standard

    Zitat Zitat von zonky Beitrag anzeigen
    Mit dem PrePersistModelEvent - siehe Vortrag CK23.
    Komm nicht auf die Folie zum Vortrag > 404

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

    Standard

    gefixt ... ist immer noch der Dateiauswahl-Bug von C4.9

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

    Standard

    btw: mit dem PreEditModelEvent könntest du das Laden der Eingabemaske beeinflussen - z. B. prüfen, ob pid geliefert wird, ob die (p)id überhaupt zu Deinen Datensätzen gehört...

  13. #13
    Contao-Fan
    Registriert seit
    20.10.2014.
    Beiträge
    485

    Standard

    PHP-Code:
    #[AsEventListener(PrePersistModelEvent::NAME)] 
    Wie komme ich an die Information ohne Console?

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

    Standard

    verstehe die Frage nicht...

  15. #15
    Contao-Fan
    Registriert seit
    20.10.2014.
    Beiträge
    485

    Standard

    Zitat Zitat von zonky Beitrag anzeigen
    verstehe die Frage nicht...
    In der Folie ist die Rede von
    In Klasse nachsehen oder in IDE Verweis auf „NAME“
    Das verstehe ich nicht

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

    Standard

    Folie 19 nehme ich an...

    den Key "dc-general.model.pre-persist" benötigst Du, wenn Du wenn per Konsole eine Prüfung stattfinden soll, ob der Event geladen wird... Eine Konsolenprüfung lässt sich ohne Konsole schwer durchführen...

    ("IDE" kann man googlen, wem das nix sagt)

  17. #17
    Contao-Fan
    Registriert seit
    20.10.2014.
    Beiträge
    485

    Standard

    PHP-Code:
    <?php

    namespace App\EventListener;

    use 
    ContaoCommunityAlliance\DcGeneral\Event\PrePersistModelEvent
    use 
    Symfony\Component\EventDispatcher\Attribute\AsEventListener;

    class 
    PrePersistModelEventListener
        
    {
            public function 
    __invoke(PrePersistModelEvent $event)
                {
                    if (
    'mm_kind' !== $event->getEnvironment()->getDataDefinition()->getName()) { return;}
                    
    $model $event->getModel(); 
                    
    $id = \Input::get('id');
                    
    $model->setProperty('pid'$id);
                }
        }
    Funktioniert. Wieder was dazugelernt. Danke.

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

    Standard

    ... bitte alle Folien durchsehen!

    pid sollte nur beim Erstellen gesetzt werden - siehe Folie Seite 21

    btw: Dein Code funktioniert auch ohne "#[AsEventListener(PrePersistModelEvent::NAME)]"?

  19. #19
    Contao-Fan
    Registriert seit
    20.10.2014.
    Beiträge
    485

    Standard

    Zitat Zitat von zonky Beitrag anzeigen
    btw: Dein Code funktioniert auch ohne "#[AsEventListener(PrePersistModelEvent::NAME)]"?
    nein
    PHP-Code:
    <?php
    // src/EventListener/PrePersistModelEventListener.php
    namespace App\EventListener;

    use 
    ContaoCommunityAlliance\DcGeneral\Event\PrePersistModelEvent;
    use 
    Symfony\Component\EventDispatcher\Attribute\AsEventListener;
    use 
    Contao\FrontendUser;

    #[AsEventListener(PrePersistModelEvent::NAME)]
    class PrePersistModelEventListener
    {
        public function 
    __invoke(PrePersistModelEvent $event)
        {
            if (
    'mm_kind' !== $event->getEnvironment()->getDataDefinition()->getName()) {
                return;
            }

            
    $model $event->getModel();
            
    $id    = \Input::get('id');

            if (
    null === $model->getId() && FrontendUser::getInstance() && $id) {
                
    $model->setProperty('pid'$id);
            }
        }
    }
    Im FE funktioniert speichern und bearbeiten. Nur im BE wird die pid nicht mehr gespeichert. Wie kann ich sicherstellen das nur im FE "gezündet" wird?
    Geändert von zonky (17.11.2023 um 12:46 Uhr)

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

    Standard

    Zitat Zitat von marcohe Beitrag anzeigen
    Im FE funktioniert speichern und bearbeiten. Nur im BE wird die pid nicht mehr gespeichert. Wie kann ich sicherstellen das nur im FE "gezündet" wird?
    z. B. siehe https://github.com/contao/contao/blo...D.md#constants oder Folie 23

  21. #21
    Contao-Fan
    Registriert seit
    20.10.2014.
    Beiträge
    485

    Standard

    Zitat Zitat von zonky Beitrag anzeigen
    PHP-Code:
    <?php
    // src/EventListener/PrePersistModelEventListener.php

    namespace App\EventListener;

    use 
    ContaoCommunityAlliance\DcGeneral\Event\PrePersistModelEvent
    use 
    Symfony\Component\EventDispatcher\Attribute\AsEventListener;

    #[AsEventListener(PrePersistModelEvent::NAME)] 

    class PrePersistModelEventListener

    {
       
    public function 
    __invoke(PrePersistModelEvent $event)
        {
            if (
    'mm_kind' !== $event->getEnvironment()->getDataDefinition()->getName()) { return;}
            
    $model $event->getModel(); 
            
    $id = \Input::get('id');
        

            if (
    null === $model->getId() AND TL_MODE == 'FE')
            {
                
    $model->setProperty('pid'$id);
            }
            
    }
    }
    Habs so gelöst. Für deine Vorschläge hab ich zu wenig Ahnung was php betrifft
    Ist zwar nicht zukunftssicher aber läuft.

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

    Standard

    die Formatierung darf dennoch etwas netter aussehen - siehe #19

  23. #23
    Contao-Fan
    Registriert seit
    20.10.2014.
    Beiträge
    485

    Standard

    PHP-Code:
    <?php
    // src/EventListener/PrePersistModelEventListener.php

    namespace App\EventListener;

    use 
    ContaoCommunityAlliance\DcGeneral\Event\PrePersistModelEvent
    use 
    Symfony\Component\EventDispatcher\Attribute\AsEventListener;
    use 
    Contao\System;
    use 
    Symfony\Component\HttpFoundation\Request;

    #[AsEventListener(PrePersistModelEvent::NAME)] 

    class PrePersistModelEventListener

    {
       
    public function 
    __invoke(PrePersistModelEvent $event)
        {
            if (
    'mm_kind' !== $event->getEnvironment()->getDataDefinition()->getName()) { return;}
            
    $model $event->getModel(); 
            
    $id = \Input::get('id');
        

            if (
    null === $model->getId() AND System::getContainer()->get('contao.routing.scope_matcher')
        ->
    isFrontendRequest(System::getContainer()->get('request_stack')->getCurrentRequest() ?? Request::create('')))
            {
                
    $model->setProperty('pid'$id);
            }
            
        }
    }
    So sollte es dann auch unter C5 funktionieren

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

    Standard

    ggf. ist es doch einfacher, mit einer service.yml zu arbeiten wie in https://github.com/e-spin/vortrag-contao-konferenz-2023

Aktive Benutzer

Aktive Benutzer

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

Lesezeichen

Lesezeichen

Berechtigungen

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