Contao-Camp 2024
Ergebnis 1 bis 32 von 32

Thema: DCA tl_member Manipulation

  1. #1
    Contao-Urgestein Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.503
    Partner-ID
    6122

    Standard DCA tl_member Manipulation

    Hallo, brauche eure Hilfe.
    Habe die tl_member über »contao/dca/tl_member.php« mit einem Text Feld erweitert ala:

    PHP-Code:
    <?php
    // contao/dca/tl_member.php

    use Contao\CoreBundle\DataContainer\PaletteManipulator;

    $GLOBALS['TL_DCA']['tl_member']['fields']['myCustomGeoData'] = [
        
    'label'  => ['demo title''demo description'],
        
    'inputType'  => 'text',
        
    'eval'  => ['tl_class' => 'w50'],
        
    'sql'  => ['type' => 'string''length' => 255'default' => ''],

        
    /*
        // working 
        'save_callback' => [
              function($varValue, DataContainer $dc) {
                $varValue = StringUtil::decodeEntities('Mein Demo Wert A');
                return $varValue; 
              }
            ],
        */
        
        // not working
        
    'save_callback' => array(array('myDemoClass''getDemo')),
        ),  

    ];

    PaletteManipulator::create()
        ->
    addLegend('Einstellungen Geo-Koordinaten''address_legend'PaletteManipulator::POSITION_AFTER)
        ->
    addField('myCustomGeoData''Einstellungen Geo-Koordinaten'PaletteManipulator::POSITION_APPEND)
        ->
    applyToPalette('default''tl_member')
    ;

    class 
    myDemoClass extends backend 
    {
      public function 
    getDemo($varValueDataContainer $dc) {
        
        
    // ... do some work
        
    $varValue StringUtil::decodeEntities('Mein Demo Wert B');
        
        return 
    $varValue
      }
    }
    Eine manuelle Eingabe ist OK. Versuche mich jetzt mit den Callbacks.
    Beim obigen Beispiel anhand von »save_callback« funktioniert es mit dem anonymen Funktionsaufruf.

    Scheitere aber dann schon über Aufruf mit externer Klasse/Methode (s.o.). Im Backend erhalte ich dann sowas wie:
    System::import() failed because class "myDemoClass" is not a valid class name or does not exist.

    Eigentlich möchte ich erreichen das das Feld manuell gefüllt werden kann und daneben eine Schaltfläche/Icon existiert welches optional das Feld mit Resultaten der getDemo() Methode befüllt.

    Benötige hierzu ein Sample, da ich schon an obigen scheitere (Erst recht mit Versuchen ala »xlabel», »wizard« oder »input_field_callback» usw.).
    Für Hilfe dankbar ...
    Geändert von Franko (21.10.2020 um 15:17 Uhr)
    Freelancer, Digital Design Enthusiast, Contao Aficionado and Tutorial Junkie @MoinFranko - Carpe diem ...

  2. #2
    Contao-Nutzer Avatar von BennyBorn
    Registriert seit
    10.06.2011.
    Ort
    Edenkoben
    Beiträge
    240
    Partner-ID
    6916

    Standard

    Naja so doof es klingen mag aber tatsächlich solltest Du Dir input_field_callback ansehen oder eben generell wie die inputTypes definiert werden. Im Core finden sich eigentlich zu allem entsprechende Beispiele.

  3. #3
    Contao-Urgestein Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.503
    Partner-ID
    6122

    Standard

    Zitat Zitat von BennyBorn Beitrag anzeigen
    Naja so doof es klingen mag aber tatsächlich solltest Du Dir input_field_callback ansehen oder eben generell wie die inputTypes definiert werden. Im Core finden sich eigentlich zu allem entsprechende Beispiele.
    Danke,
    jemand einen Hinweis warum es mit der KLasse myDemoClass und getDemo() nicht will?
    Freelancer, Digital Design Enthusiast, Contao Aficionado and Tutorial Junkie @MoinFranko - Carpe diem ...

  4. #4
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.061
    Partner-ID
    10107

    Standard

    Siehe die Entwickler Dokumentation, wie du Callbacks registrierst: https://docs.contao.org/dev/framewor...ring-callbacks

  5. #5
    Contao-Urgestein Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.503
    Partner-ID
    6122

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Siehe die Entwickler Dokumentation, wie du Callbacks registrierst: https://docs.contao.org/dev/framewor...ring-callbacks
    Danke,
    über den "old way" klappt es in meiner »contao/dac/tl_member.php«.
    Über die aktuelleren Optionen - brauche ich noch Denkanstöße :-)

    Frage zu den jeweiligen Translations/Kategorien: https://docs.contao.org/dev/framewor...ns/#categories
    Wo ist der Unterschied zwischen
    Category Domain
    ERR default
    XPT exception

    Dann:
    Ich würde gerne eine Info Meldung innerhalb meiner Callback Methode (save_callback) ausgeben (keine Exeption) wenn z.B die Felder (der tl_member) street, city und postal nicht belegt sind.
    Versuche über \Message::addInfo('bla') bringen gar keine Ausgabe im BE ...

    Für Hilfe dankbar
    Franko
    Freelancer, Digital Design Enthusiast, Contao Aficionado and Tutorial Junkie @MoinFranko - Carpe diem ...

  6. #6
    Contao-Urgestein Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.503
    Partner-ID
    6122

    Standard

    Hallo,
    ich habe die tl_member um ein Textfeld und eine checkbox erweitert (s.o.).

    Bei aktivierter checkbox soll über ein callback ein Wert ermittelt und in dem Text Feld eingetragen werden.
    Hierzu benötige ich Angaben aus z.B. street, postal und city.

    Wie könnte ich darauf reagieren, wenn diese Felder nicht gefüllt sind:
    Die checkbox erst aktivieren wenn die Inhalte aus street, postal und city zur Verfügung stehen. - Howto?
    Beim aktivieren der checkbox einen Hinweis ausgeben, falls nicht alle Felder ausgefüllt sind - Howto?

    Für Denkanstöße dankbar
    Frank
    Freelancer, Digital Design Enthusiast, Contao Aficionado and Tutorial Junkie @MoinFranko - Carpe diem ...

  7. #7
    Contao-Urgestein Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.503
    Partner-ID
    6122

    Standard Registrierung callback via Service Annotation

    Hallo,
    nochmal eine Frage zur callback Registrierung via Service Annotation

    Versuch anhand der Doku zu meinem obigen »contao/dca/tl_member.php« sample funktioniert nicht:

    PHP-Code:
    namespace App\EventListener\DataContainer;

    use 
    Contao\CoreBundle\DataContainer\PaletteManipulator;
    use 
    Contao\StringUtil;

    use 
    Contao\CoreBundle\ServiceAnnotation\Callback;
    use 
    Contao\DataContainer;

    class 
    myDemoClass 
    {
        
    /**
         * @Callback(table="tl_member", target="config.save")
         */
        
    public function myDemoMethod($valueDataContainer $dc)
        {
            
    $value StringUtil::decodeEntities('My demo return value'); 
            return 
    $value;
        }

    Im Forum sowas gefunden wie:

    PHP-Code:
    namespace App\EventListener\DataContainer;

    use 
    Contao\CoreBundle\DataContainer\PaletteManipulator;
    use 
    Contao\StringUtil;
    use 
    Contao\CoreBundle\ServiceAnnotation\Callback;
    use 
    Contao\DataContainer;

    use 
    Terminal42\ServiceAnnotationBundle\ServiceAnnotationInterface;

    //working
    class myDemoClass implements ServiceAnnotationInterface
    {
        
    /**
         * @Callback(table="tl_member", target="config.save")
         */
        
    public function myDemoMethod($valueDataContainer $dc)
        {
            
    $value StringUtil::decodeEntities('My demo return value'); 
            return 
    $value;
        }

    Das funktioniert dann. Ist das so korrekt bzw. wann greift das Sample aus der Doku?
    Freelancer, Digital Design Enthusiast, Contao Aficionado and Tutorial Junkie @MoinFranko - Carpe diem ...

  8. #8
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.061
    Partner-ID
    10107

    Standard

    config.save gibt es nicht. Siehe die Referenz: https://docs.contao.org/dev/reference/dca/callbacks/

  9. #9
    Contao-Urgestein Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.503
    Partner-ID
    6122

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    config.save gibt es nicht. Siehe die Referenz: https://docs.contao.org/dev/reference/dca/callbacks/
    Ja, ich raffs nicht. Bei mir funktioniert beides

    PHP-Code:
        /**
         * @Callback(table="tl_member", target="config.save")
         */ 
    oder

    PHP-Code:
        /**
         * @Callback(table="tl_member", target="config.onsubmit")
         */ 
    mit Aufruf
    PHP-Code:
    ...
        
    'save_callback' => array(
          array(\
    App\EventListener\DataContainer\myDemoClass::class, 'myDemoMethod')
        ),
    ... 
    Wenn ich den Cache leere und innerhalb eines Mitglieds speichere wird mir der Wert immer im Feld eingetragen und auch gespeichert ... ???
    Freelancer, Digital Design Enthusiast, Contao Aficionado and Tutorial Junkie @MoinFranko - Carpe diem ...

  10. #10
    Contao-Urgestein Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.503
    Partner-ID
    6122

    Standard

    Gleiches probiert mit:

    PHP-Code:
        /**
         * @Callback(table="tl_member", target="field.save")
         */ 
    ?

    Wie gesagt - der Return Wert aus der Methode wird angezeigt und gespeichert. Nur Warum?
    Freelancer, Digital Design Enthusiast, Contao Aficionado and Tutorial Junkie @MoinFranko - Carpe diem ...

  11. #11
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.061
    Partner-ID
    10107

    Standard

    Auch field.save gibt es nicht. Wenn du einen save_callback umsetzen willst, dann musst du auch das richtige Target nehmen: https://docs.contao.org/dev/referenc...lds-field-save

  12. #12
    Contao-Urgestein Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.503
    Partner-ID
    6122

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Auch field.save gibt es nicht. Wenn du einen save_callback umsetzen willst, dann musst du auch das richtige Target nehmen: https://docs.contao.org/dev/referenc...lds-field-save
    Danke,
    aber irgendwie funktioniert es ja immer bei meinen lokalen Versuchen. Das verstehe ich ja eben nicht.
    Wenn immer ich Änderungen an der contao/dca/tl_member.php vornehme mache ich ein:
    vendor/bin/contao-console cache:clear --no-warmup
    vendor/bin/contao-console cache:warmup
    Und es funktioniert???
    Freelancer, Digital Design Enthusiast, Contao Aficionado and Tutorial Junkie @MoinFranko - Carpe diem ...

  13. #13
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.061
    Partner-ID
    10107

    Standard

    Ich verstehe nicht was du meinst, ich dachte es funktioniert nicht?

  14. #14
    Contao-Urgestein Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.503
    Partner-ID
    6122

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Ich verstehe nicht was du meinst, ich dachte es funktioniert nicht?
    Danke für deine Geduld.
    Hier meine vollständige »contao/dca/tl_member.php«:

    PHP-Code:
    <?php
    // contao/dca/tl_member.php

    namespace App\EventListener\DataContainer;

    use 
    Contao\CoreBundle\DataContainer\PaletteManipulator;

    use 
    Contao\Message;
    use 
    Contao\StringUtil;

    use 
    Contao\CoreBundle\ServiceAnnotation\Callback;
    use 
    Contao\DataContainer;

    use 
    Terminal42\ServiceAnnotationBundle\ServiceAnnotationInterface;

    //working
    class myDemoClass implements ServiceAnnotationInterface
    {
        
    /**
         * @Callback(table="tl_member", target="fields.myCustomGeoData.save")
         */
        
    public function myDemoMethod($valueDataContainer $dc)
        {
            
    $value StringUtil::decodeEntities('My demo return value field save'); 
            return 
    $value;
        }
    }


    $GLOBALS['TL_DCA']['tl_member']['fields']['myCustomGeoData'] = [
        
    'label'            => ['Koordinaten''Hier können Sie Koordinaten der Form »Breitengrad,Längengrad« vergeben.'],
        
    'inputType' => 'text',
        
    'eval'             => ['tl_class' => 'w50''helpwizard' => true],
        
    'explanation' => 'my_explanation',
        
    'sql'       => ['type' => 'string''length' => 255'default' => ''],
        
        
    'save_callback' => array(
          array(\
    App\EventListener\DataContainer\myDemoClass::class, 'myDemoMethod')
        ),
        

    ];

    PaletteManipulator::create()
        
    // add a new Legend before the "expert_legend"
        
    ->addLegend('Einstellungen Geo-Koordinaten''address_legend'PaletteManipulator::POSITION_AFTER)

        
    // directly add new field(s)s to the new legend
        
    ->addField('myCustomGeoData''Einstellungen Geo-Koordinaten'PaletteManipulator::POSITION_APPEND)

        
    // then apply it to the palette as usual
        
    ->applyToPalette('default''tl_member')
    ;
    Ich kann eintragen was ich will:

    PHP-Code:
    /**
         * @Callback(table="tl_member", target="config.save")
         */ 
    oder

    PHP-Code:
    /**
         * @Callback(table="tl_member", target="config.onsubmit")
         */ 
    Irgenwie funktioniert es und ich weiß nicht warum.
    Nach jeder Änderung an der »contao/dca/tl_member.php« lösche ich den Anwendungscache ...
    Freelancer, Digital Design Enthusiast, Contao Aficionado and Tutorial Junkie @MoinFranko - Carpe diem ...

  15. #15
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.061
    Partner-ID
    10107

    Standard

    Zitat Zitat von Franko Beitrag anzeigen
    Hier meine vollständige »contao/dca/tl_member.php«:
    In contao/dca/ machst du nur DCA Definitionen und Anpassungen. Eigener Code kommt in den src/ Ordner. Siehe auch https://docs.contao.org/dev/getting-...g-development/

  16. #16
    Contao-Urgestein Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.503
    Partner-ID
    6122

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    In contao/dca/ machst du nur DCA Definitionen und Anpassungen. Eigener Code kommt in den src/ Ordner. Siehe auch https://docs.contao.org/dev/getting-...g-development/
    Schon, nur warum funktioniert es dennoch bei mir?
    (habe noch zu schenllen Testtwecken die RSCE Erweiterung installiert - liegt es evtl. daran)
    Freelancer, Digital Design Enthusiast, Contao Aficionado and Tutorial Junkie @MoinFranko - Carpe diem ...

  17. #17
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.061
    Partner-ID
    10107

    Standard

    Zitat Zitat von Franko Beitrag anzeigen
    Schon, nur warum funktioniert es dennoch bei mir?
    Du hast direkt in deiner tl_member DCA Datei die Klasse App\EventListener\DataContainer\myDemoClass definiert und direkt in deiner tl_member DCA Anpassung die Klasse + Methode für den save_callback definiert. Also du hast im Prinzip den alten Contao 2/3 Stil benutzt.

  18. #18
    Contao-Urgestein Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.503
    Partner-ID
    6122

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Du hast direkt in deiner tl_member DCA Datei die Klasse App\EventListener\DataContainer\myDemoClass definiert und direkt in deiner tl_member DCA Anpassung die Klasse + Methode für den save_callback definiert. Also du hast im Prinzip den alten Contao 2/3 Stil benutzt.
    Danke,
    ich glaub jetzt wird es heller ...
    Freelancer, Digital Design Enthusiast, Contao Aficionado and Tutorial Junkie @MoinFranko - Carpe diem ...

  19. #19
    Contao-Urgestein Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.503
    Partner-ID
    6122

    Standard

    Zitat Zitat von Franko Beitrag anzeigen
    Danke,
    ich glaub jetzt wird es heller ...
    Bisher dachte ich wohl noch zu »RSCE« lastig .
    Die bisherige Vorgehensweise (old way) hinsichtlich DCA und Callbacks (via anonymer Funktion oder direkter KLasse+Methode Definition) funktioniert ja.
    Zur Nutzung weniger Feld Ergänzungen mit ein o. zwei Callbacks finde ich dies hinsichtlich Dateistruktur etc. zusammen mit den language files übersichtlich.
    Oder welche Nachteile ergeben sich möglicherweise daraus?

    Damit ich den »neuen« Weg über das »src« Verzeichnis (nicht als Erweiterung - sondern für eine Installation) verstehe probier ich es dann via https://docs.contao.org/dev/framewor...ice-annotation

    Im Anschluss sollte der CM auf das »src« reagieren und mir die notwendigen composer.json Angaben ergänzen. Allerdings steht in https://docs.contao.org/dev/getting-...es-and-actions das es während der Entwicklung besser wäre ohne die composer »-o/--optimize-autoloader« Option zu arbeiten -
    Also dann hierbei besser die composer.json direkt bearbeiten und dann über den composer gehen - Korrekt?

    Registrierungen könnte ich über die Console testen/verifizieren:
    Code:
    vendor/bin/contao-console debug:container xxx
    Sollte alles funktionieren könnte ich im debug Modus Änderungen vornehmen ohne jeweils wieder den Anwendungscache manuell löschen zu müssen (es sei denn es kommen neue Dateien hinzu) - Ist das so korrekt?
    Geändert von Franko (27.10.2020 um 13:21 Uhr)
    Freelancer, Digital Design Enthusiast, Contao Aficionado and Tutorial Junkie @MoinFranko - Carpe diem ...

  20. #20
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.061
    Partner-ID
    10107

    Standard

    Zitat Zitat von Franko Beitrag anzeigen
    Also dann hierbei besser die composer.json direkt bearbeiten und dann über den composer gehen - Korrekt?
    Was meinst du damit?

  21. #21
    Contao-Urgestein Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.503
    Partner-ID
    6122

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Was meinst du damit?
    Den Eintrag (aus https://docs.contao.org/dev/getting-...es-and-actions)

    HTML-Code:
    {
        "autoload": {
            "psr-4": {
                "App\\": "src/"
            }
        }
    }
    Freelancer, Digital Design Enthusiast, Contao Aficionado and Tutorial Junkie @MoinFranko - Carpe diem ...

  22. #22
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.061
    Partner-ID
    10107

    Standard

    Achso, ja ist grundsätzlich egal ob du das selbst hinzufügst oder durch den Contao Manager erledigen lässt.

  23. #23
    Contao-Urgestein Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.503
    Partner-ID
    6122

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Achso, ja ist grundsätzlich egal ob du das selbst hinzufügst oder durch den Contao Manager erledigen lässt.
    Naja - Frage war wegen:

    ...During development it is advisable to not optimize the Autoloader by Composer, otherwise new classes that you created will not be available immediately. ...
    Und evtl. ergänzend hinsichtlich der composer 2.0 Ankündigung (https://blog.packagist.com/composer-...now-available/) im Bereich »Invalid PSR-0 / PSR-4 configurations«.
    Muss dann hierbei u.U. etwas anderes berücksichtigt werden?
    Lieben Dank
    Freelancer, Digital Design Enthusiast, Contao Aficionado and Tutorial Junkie @MoinFranko - Carpe diem ...

  24. #24
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.061
    Partner-ID
    10107

    Standard

    Zitat Zitat von Franko Beitrag anzeigen
    Naja - Frage war wegen:



    Und evtl. ergänzend hinsichtlich der composer 2.0 Ankündigung (https://blog.packagist.com/composer-...now-available/) im Bereich »Invalid PSR-0 / PSR-4 configurations«.
    Du kannst den Eintrag ja trotzdem vom Contao Manager machen lassen. Wenn du danach nochmal
    Code:
    composer install
    oder
    Code:
    composer dump-autoload
    ausführst, hast du wieder Autoloading ohne Optimierung.



    Zitat Zitat von Franko Beitrag anzeigen
    Und evtl. ergänzend hinsichtlich der composer 2.0 Ankündigung (https://blog.packagist.com/composer-...now-available/) im Bereich »Invalid PSR-0 / PSR-4 configurations«.
    Muss dann hierbei u.U. etwas anderes berücksichtigt werden?
    Nein, das passt so.

  25. #25
    Contao-Urgestein Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.503
    Partner-ID
    6122

    Standard

    Danke,
    und ich wiederhole mich gern - im Sinne meiner in diesem Forum Kontext - stupid Questions.
    Habe (wirklich) hier im Forum und in den Docs recherchiert/gelesen.

    Als nicht PHP affin meinerseits (für templates reicht es wohl) werden/sind die Docs immens wichtig:
    Zwar finde ich immense Forum Beiträge mit Lösungen - diese sind aber zumeist Contao Version abhängig und man findet gegebenenfalls nur Ausschnitte zu spezifischen Fragen.

    Wenn man dann die Dev-Doku liest - hört es sich immer logisch an und man/ich meint verstanden zu haben:
    Im Detail fehlt es dann doch immer wieder ... Daher:

    Ich bilde mir ein - Wenn ich es nicht verstehe, versteht es es u. U. die Mehrheit auch nicht -
    im Sinne von: Kleine DCA Änderungen ohne Erweiterung usw..

    Daher nochmals meinen Dank
    Ich versuche dann meine bescheidenen Fortschritte in den Contao Doks zu vermitteln ...
    Freelancer, Digital Design Enthusiast, Contao Aficionado and Tutorial Junkie @MoinFranko - Carpe diem ...

  26. #26
    Contao-Urgestein Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.503
    Partner-ID
    6122

    Standard

    Habe jetzt versucht auf die "neue" Art umzusetzen:

    PHP-Code:
    <?php
    // src/EventListener/DataContainer/myCallbackListener.php
    namespace App\EventListener\DataContainer;

    use 
    Contao\CoreBundle\ServiceAnnotation\Callback;
    use 
    Contao\DataContainer;

    class 
    myCallbackListener
    {
        
    /**
         * @Callback(table="tl_content", target="field.myDemoData.save")
         */
        
    public function myTest($myValueDataContainer $dc): string
        
    {
            
    // Do something …
            
    dump($dc);
            return 
    'Hooray';
        }
    }
    PHP-Code:
    <?php
    // contao/dca/tl_content.php

    use Contao\CoreBundle\DataContainer\PaletteManipulator;

    $GLOBALS['TL_DCA']['tl_content']['fields']['myDemoData'] = [
        
    'label'       => ['Mein Element''Meine Beschreibung'],
        
    'inputType'   => 'text',
        
    'explanation' => 'my_explanation',
        
    'eval'        => ['tl_class' => 'w50''helpwizard' => true],
        
    'sql'         => 'text NULL',

       
        
    // Working
        
    'save_callback' => [
          [
    App\EventListener\DataContainer\myCallbackListener::class, 'myTest']
        ],
    ];

    PaletteManipulator::create()
        ->
    addLegend('Einstellungen Demo''type_legend'PaletteManipulator::POSITION_AFTER)
        ->
    addField('myDemoData''Einstellungen Demo'PaletteManipulator::POSITION_APPEND)
        ->
    applyToPalette('text''tl_content')
    ;
    Der CM sollte doch dann das "src" Verzeichnis erkennen und entsprechend die composer.json erweitern?
    Macht er nicht - Wie ist die Vorgehensweise?

    Hab dann die composer.json manuell geändert ala:

    HTML-Code:
    {
        "type": "project",
        "require": {
            "contao/calendar-bundle": "4.10.*",
            "contao/comments-bundle": "4.10.*",
            "contao/conflicts": "*@dev",
            "contao/faq-bundle": "4.10.*",
            "contao/listing-bundle": "4.10.*",
            "contao/manager-bundle": "4.10.*",
            "contao/news-bundle": "4.10.*",
            "contao/newsletter-bundle": "4.10.*",
            "erdmannfreunde/euf_grid": "^3.1"
        },
        "extra": {
            "contao-component-dir": "assets"
        },
        "autoload": {
            "psr-4": {
                "App\\": "src/"
            }
        },
        "scripts": {
            "post-install-cmd": [
                "Contao\\ManagerBundle\\Composer\\ScriptHandler::initializeApplication"
            ],
            "post-update-cmd": [
                "Contao\\ManagerBundle\\Composer\\ScriptHandler::initializeApplication"
            ]
        }
    }
    und dann auf der Console mit:

    HTML-Code:
    composer install 
    composer dump-autoload
    Der Test via:
    Code:
    vendor/bin/contao-console debug:container App\EventListener\DataContainer\myCallbackListener
    ergibt dannn:

    Code:
     Option           Value
     ---------------- ------------------------------------------------------------------------------------
      Service ID       App\EventListener\DataContainer\myCallbackListener
      Class            App\EventListener\DataContainer\myCallbackListener
      Tags             contao.callback (table: tl_content, target: field.myDemoData.save, method: myTest)
      Public           yes
      Synthetic        no
      Lazy             no
      Shared           yes
      Abstract         no
      Autowired        yes
      Autoconfigured   yes
    ... und es funktioniert dann ...
    Wie bringe ich dann den CM dazu die composer.json um den autoload Eintrag zu erweitern?
    Geändert von Franko (28.10.2020 um 16:09 Uhr)
    Freelancer, Digital Design Enthusiast, Contao Aficionado and Tutorial Junkie @MoinFranko - Carpe diem ...

  27. #27
    Contao-Urgestein Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.503
    Partner-ID
    6122

    Standard

    Probier es nochmal lokal über eine frische Installation via CM -
    Erwartet: der CM erkennt dann das "src" Verzeichnis und fügt dann die entsprechenden Angaben der composer.json hinzu:

    Code:
    "autoload": {
            "psr-4": {
                "App\\": "src/"
            }
        },
    Oder?
    Geändert von Franko (28.10.2020 um 16:48 Uhr)
    Freelancer, Digital Design Enthusiast, Contao Aficionado and Tutorial Junkie @MoinFranko - Carpe diem ...

  28. #28
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.061
    Partner-ID
    10107

    Standard

    Zitat Zitat von Franko Beitrag anzeigen
    Der CM sollte doch dann das "src" Verzeichnis erkennen und entsprechend die composer.json erweitern?
    Sollte so sein, wenn du im Contao Manager den Autoloader neu erzeugst.

  29. #29
    Contao-Urgestein Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.503
    Partner-ID
    6122

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Sollte so sein, wenn du im Contao Manager den Autoloader neu erzeugst.
    Ja, also im CM über »Systemwartung->Composer Class Loader« ...

    Wie gesagt probier die Vorgehensweise morgen mit einer lokalen,frischen Installation nochmal.
    Evtl. ist bei meinen lokalen tests einiges durcheinandergeraten ...
    Freelancer, Digital Design Enthusiast, Contao Aficionado and Tutorial Junkie @MoinFranko - Carpe diem ...

  30. #30
    Contao-Urgestein Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.503
    Partner-ID
    6122

    Standard

    Hallo,
    hab es jetzt über eine frische Installation probiert.

    Die composer.json beinhaltet NICHT den Eintrag:

    Code:
        "autoload": {
            "psr-4": {
                "App\\": "src/"
            }
        },
    Danach die Verzeichnisse (contao u. src) kopiert und über den CM (composer install und dump-autoload) angestoßen.
    Code:
    vendor/bin/contao-console debug:container App\EventListener\DataContainer\myCallbackListener
    wird erkannt (inkl. Autowired yes / Autoconfigured yes).

    Daher Frage: Wann/Warum wird der Eintrag in der composer.json notwendig?

    Und eine Frage zur https://docs.contao.org/dev/framewor...ice-annotation.
    Kann ich hier auch die Priorität mitgeben:

    Optional: priority of the callback. By default it will be executed before all legacy callbacks according to the loading order of the bundles. Anything with higher than 0 will be executed before legacy callbacks. Anything with lower than 0 will be executed after legacy callbacks.
    Und was wäre da dann der geeignete Wert (ala -999999) ?

    Danke
    Freelancer, Digital Design Enthusiast, Contao Aficionado and Tutorial Junkie @MoinFranko - Carpe diem ...

  31. #31
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.061
    Partner-ID
    10107

    Standard

    Ja, eine Priorität kannst du mitgeben. Welcher Wert für dich "geeignet" ist hängt davon ab, was du erreichen möchtest.

  32. #32
    Contao-Urgestein Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.503
    Partner-ID
    6122

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Ja, eine Priorität kannst du mitgeben. Welcher Wert für dich "geeignet" ist hängt davon ab, was du erreichen möchtest.
    Danke, mal so gesetzt

    PHP-Code:
        /**
         * @Callback(table="tl_content", target="field.myData.load", priority=-999)
         */ 
    Hinsichtlich ... Anything with lower than 0 will be executed after legacy callbacks. ...
    Wäre das Ok oder reicht -1 bzw. woher weiß ich denn welche Prios existieren
    Freelancer, Digital Design Enthusiast, Contao Aficionado and Tutorial Junkie @MoinFranko - Carpe diem ...

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
  •