Contao-Camp 2024
Ergebnis 1 bis 38 von 38

Thema: Nur aktive Mitgliedergruppen zur Auswahl geben

  1. #1
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.273

    Standard Nur aktive Mitgliedergruppen zur Auswahl geben

    Servus beisammen,

    wir haben durch unsere Kurse sehr viele Benutzergruppen (siehe Anhang). Wenn ich jetzt neue Schüler anlege, werden mir dort auch alle alten Kurs-/Mitgliedergruppen angezeigt. Sie inaktiv zu schalten ändert im Backend leider nichts. Da diese Liste immer länger wird, leidet hier die Administration etwas.

    Wie kann ich an dieser Stelle nur "aktive" Mitgliedergruppen auflisten?

    VG Frank
    Angehängte Grafiken Angehängte Grafiken

  2. #2
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.896
    Partner-ID
    10107
    » sponsor me via GitHub or PayPal or Revolut

  3. #3
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.273

    Standard

    OK und für nicht Entwickler? :-D
    Geändert von Kahmoon (01.08.2022 um 11:31 Uhr)

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

    Standard

    Zitat Zitat von Kahmoon Beitrag anzeigen
    OK und für nicht Entwickler? :-D
    Für Nicht-Entwickler wird es vermutlich keine Lösung geben, sofern das nicht jemand mal als Extension zufällig umgesetzt hat.
    » sponsor me via GitHub or PayPal or Revolut

  5. #5
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.273

    Standard

    Wie aufwändig ist es denn? Nur ein Snipped wie bei einem Custom Field für Member? Oder ist das ne komplette Erweiterung? Weil ersteres kann ich sicher mit Forumhilfe hinbasteln.

    also in dca/tl_membergroup.php müsste das vermutlich?

    PHP-Code:
    // contao/dca/tl_membergroup.php
    $GLOBALS['TL_DCA']['tl_membergroup']['list']['global_operations'] = [    ]; 

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

    Standard

    Du musst einen Callback anlegen, das ist eine einzelne Datei. Siehe https://docs.contao.org/dev/framewor...ice-annotation
    » sponsor me via GitHub or PayPal or Revolut

  7. #7
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.273

    Standard

    Hmm ok das checke ich leider nicht so ganz ;-).


    An meiner Anforderung dann wahrscheinlich irgendwie so in der Art? Allerdings brauche ich keine Aktion on.submit..also kann ich diesen Snipped nicht wirklich als Vorlage nehmen oder?

    Code:
    <?php
    // src/EventListener/DataContainer/MemberGroupFilterCallbackListener.php
    namespace App\EventListener\DataContainer;
    
    
    use Contao\CoreBundle\ServiceAnnotation\Callback;
    use Contao\DataContainer;
    
    
    class MemberGroupFilterCallbackListener
    {
        /**
         * @Callback(table="tl_member_group", target="config.onsubmit")
         */
        public function onSubmitCallback(DataContainer $dc): void
        {
            // Do something …
        }
    }
    ?>
    Wo müsste diese Datei dann abgelegt werden?

    P.S. Wenn uns das jemand schnell gegen Aufwandsentschädigung bauen kann/mag. Gerne PN.

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

    Standard

    Der Callback den brauchst ist für die Tabelle tl_member und das Ziel ist fields.groups.options. Dein Callback lädt dann die tl_member_group Einträge - aber eben nur die veröffentlichten - und gibt diese dann als Key Value Array zurück (key = ID, value = Titel der Gruppe).
    » sponsor me via GitHub or PayPal or Revolut

  9. #9
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.273

    Standard

    Soweit verstanden. Wie das dann aber in Code aussieht ist mir noch nicht klar.

    Code:
    <?php
    // src/EventListener/DataContainer/MemberGroupActiveFilterCallbackListener.php
    namespace App\EventListener\DataContainer;
    
    
    use Contao\CoreBundle\ServiceAnnotation\Callback;
    use Contao\DataContainer;
    
    
    class MemberGroupActiveFilterCallbackListener
    {
        /**
         * @Callback(table="tl_member", target="fields.groups.options")
         */
        public function getActiveGroups(DataContainer $dc): void
        {
            // Do something …
        }
    }
    ?>
    P.S. Wenn uns das jemand schnell gegen Aufwandsentschädigung bauen kann/mag. Gerne PN.
    Geändert von Kahmoon (01.08.2022 um 12:03 Uhr)

  10. #10
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.273

    Standard

    Es gibt unter vendor/contao/core-bundle/src/EventListener/DataContainer die Datei MemberGroupsListener.php. Dort ist eine Query drin die ich anpassen könnte. Dann bin ich aber nicht updatesicher nehme ich an :-)


    Code:
    <?php
    
    
    declare(strict_types=1);
    
    
    /*
     * This file is part of Contao.
     *
     * (c) Leo Feyer
     *
     * @license LGPL-3.0-or-later
     */
    
    
    namespace Contao\CoreBundle\EventListener\DataContainer;
    
    
    use Contao\CoreBundle\ServiceAnnotation\Callback;
    use Doctrine\DBAL\Connection;
    use Symfony\Contracts\Translation\TranslatorInterface;
    
    
    /**
     * @Callback(table="tl_article", target="fields.groups.options")
     * @Callback(table="tl_content", target="fields.groups.options")
     * @Callback(table="tl_module", target="fields.groups.options")
     * @Callback(table="tl_page", target="fields.groups.options")
     */
    class MemberGroupsListener
    {
        private Connection $connection;
        private TranslatorInterface $translator;
    
    
        public function __construct(Connection $connection, TranslatorInterface $translator)
        {
            $this->connection = $connection;
            $this->translator = $translator;
        }
    
    
        public function __invoke(): array
        {
            $options = [-1 => $this->translator->trans('MSC.guests', [], 'contao_default')];
            $groups = $this->connection->fetchAllAssociative('SELECT id, name FROM tl_member_group WHERE tstamp>0 ORDER BY name');
    
    
            foreach ($groups as $group) {
                $options[$group['id']] = $group['name'];
            }
    
    
            return $options;
        }
    }

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

    Standard

    Diese Datei anzupassen würde nicht helfen, denn du willst ja einen Callback für fields.groups.options in tl_member anpassen.
    » sponsor me via GitHub or PayPal or Revolut

  12. #12
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.273

    Standard

    Aber diese Datei liest doch die Gruppen aus oder nicht? Ist das nicht der Ordner für Callbacks?

    Schade, zu früh gefreut

    Aber ich könnte die Abfrage davon adaptieren? Quasi so?

    Code:
    <?php
    // src/EventListener/DataContainer/MemberGroupsActiveFilterCallbackListener.php
    namespace App\EventListener\DataContainer;
    
    
    use Contao\CoreBundle\ServiceAnnotation\Callback;
    use Contao\DataContainer;
    
    
    class MemberGroupsActiveFilterCallbackListener
    {
        /**
         * @Callback(table="tl_member", target="fields.groups.options")
         */
        public function __invoke(): array
        {
            $options = [-1 => $this->translator->trans('MSC.guests', [], 'contao_default')];
            $groups = $this->connection->fetchAllAssociative('SELECT id, name FROM tl_member_group WHERE disable != 1 AND tstamp>0 ORDER BY name');
    
    
            foreach ($groups as $group) {
                $options[$group['id']] = $group['name'];
            }
    
    
            return $options;
        }
    }
    ?>
    Geändert von Kahmoon (01.08.2022 um 12:38 Uhr)

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

    Standard

    ca., ja (ohne es jetzt im Detail geprüft zu haben).
    » sponsor me via GitHub or PayPal or Revolut

  14. #14
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.273

    Standard

    OK und die Datei MemberGroupActiveFilterCallbackListener.php habe ich jetzt in vendor/contao/core-bundle/src/EventListener/DataContainer hinterlegt.

    Woher weiß Contao jetzt das er die beachten soll?

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

    Standard

    Zitat Zitat von Kahmoon Beitrag anzeigen
    OK und die Datei MemberGroupActiveFilterCallbackListener.php habe ich jetzt in vendor/contao/core-bundle/src/EventListener/DataContainer hinterlegt.
    Das ist der falsche Ort. Siehe die Beispiele in der Entwickler Dokumentation, bzw. auch die Bschreibung wie du einen Callback registrierst.
    » sponsor me via GitHub or PayPal or Revolut

  16. #16
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.273

    Standard

    diese Ordnerstruktur finde ich nirgends.

    Contao\CoreBundle\ServiceAnnotation\Callback

    Muss ich die anlegen?

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

    Standard

    Zitat Zitat von Kahmoon Beitrag anzeigen
    diese Ordnerstruktur finde ich nirgends.
    » sponsor me via GitHub or PayPal or Revolut

  18. #18
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.273

    Standard

    OK, sorry das ich mich hier so Stückchen weise durchhangeln muss :-(

    Also ich habe jetzt im root den Ordner src mit entsprechenden Unterordnern angelegt und habe da meine Datei hochgeladen.
    src/EventListener/DataContainer/MemberGroupsActiveFilterCallbackListener.php

    Habe im Anschluss den Chache vom System geleert und bekomme jetzt im Backend ne Fehlermeldung "Call to a member function trans() on null". Somit liegt die Datei zumindest schon mal an der richtigen Stelle *haha*

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

    Standard

    Korrekt. In deinem obigen Code Beispiel hast du allerdings den Translator benutzt, diesen aber nicht injected.
    » sponsor me via GitHub or PayPal or Revolut

  20. #20
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.273

    Standard

    OK, den Translator brauche ich nicht.
    Geändert von Kahmoon (01.08.2022 um 13:27 Uhr)

  21. #21
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.273

    Standard

    Also so kommen jetzt mal kein Fehler mehr....aber er listet nach wie vor alle Gruppen. Er ignoriert quasi die Query


    Code:
    <?php// src/EventListener/DataContainer/MemberGroupsActiveFilterCallbackListener.php
    namespace App\EventListener\DataContainer;
    
    
    use Contao\CoreBundle\ServiceAnnotation\Callback;
    use Contao\DataContainer;
    use Symfony\Contracts\Translation\TranslatorInterface;
    
    
    
    
    class MemberGroupsActiveFilterCallbackListener
    {
        /**
         * @Callback(table="tl_member_group", target="fields.groups.options")
         */
        private Connection $connection;
        private TranslatorInterface $translator;
    
    
        public function __construct(Connection $connection, TranslatorInterface $translator)
        {
            $this->connection = $connection;
            $this->translator = $translator;
        }
    
    
        public function __invoke(): array
        {
            $options = [-1 => $this->translator->trans('MSC.guests', [], 'contao_default')];
            $groups = $this->connection->fetchAllAssociative('SELECT id, name FROM tl_member_group WHERE disable != 1 AND tstamp>0 ORDER BY name');
    
    
            foreach ($groups as $group) {
                $options[$group['id']] = $group['name'];
            }
    
    
            return $options;
            
        }
    }
    ?>
    Geändert von Kahmoon (01.08.2022 um 13:42 Uhr)

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

    Standard

    Du hast als Tabelle "tl_member_group" festgelegt und als Ziel "fields.groups.options". In der Tabelle tl_member_group gibt es kein Feld namens "groups". Laut deiner Beschreibung willst du das Verhalten des Feldes "groups" in der Tabelle "tl_member" ändern.
    » sponsor me via GitHub or PayPal or Revolut

  23. #23
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.273

    Standard

    Ne, das is nur ein Copy & Paste Fehler von ein paar Versuchen sorry. War schon tl_member

    Ich will das in den Einstellungen eines Mitglieds die bereinigte Liste, sprich nur aktive Gruppen, der Mitgliedergruppen erscheint.

    Code:
    <?php
    // src/EventListener/DataContainer/MemberGroupsActiveFilterCallbackListener.php
    namespace App\EventListener\DataContainer;
    
    
    use Contao\CoreBundle\ServiceAnnotation\Callback;
    use Contao\DataContainer;
    use Symfony\Contracts\Translation\TranslatorInterface;
    
    
    
    
    class MemberGroupsActiveFilterCallbackListener
    {
        /**
         * @Callback(table="tl_member", target="fields.groups.options")
         */
        private Connection $connection;
        private TranslatorInterface $translator;
    
    
        public function __construct(Connection $connection, TranslatorInterface $translator)
        {
            $this->connection = $connection;
            $this->translator = $translator;
        }
    
    
        public function __invoke(DataContainer $dc): array
        {
            $options = [-1 => $this->translator->trans('MSC.guests', [], 'contao_default')];
            $groups = $this->connection->fetchAllAssociative('SELECT id, name FROM tl_member_group WHERE disable != 1 AND tstamp>0 ORDER BY name');
    
    
            foreach ($groups as $group) {
                $options[$group['id']] = $group['name'];
            }
    
    
            return $options;
            
        }
    }
    ?>

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

    Standard

    Die @Callback Annotation machst du entweder auf der Klasse oder auf der Methode (Klasse reicht bei deinem Fall). Die erste Zeile innerhalb deiner __invoke wirst du vermutlich nicht benötigen, weil du willst ja nicht "Gäste" zusätzlich auswählen können.
    » sponsor me via GitHub or PayPal or Revolut

  25. #25
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.273

    Standard

    Aber im foreach innerhalb invoke wird ja $options verwendet.

    Zumindest die Query stimmt und würde das gewünschte Ergebnis liefern.

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

    Standard

    Ich meinte die -1 Option wirst du verumtlich nicht benötigen.
    » sponsor me via GitHub or PayPal or Revolut

  27. #27
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.273

    Standard

    Wenn ich das weglasse kommt nach wie vor die volle Liste. Als geht er da gar nicht rein bzw. überschreibt die Liste nicht.

    Code:
    <?php
    // src/EventListener/DataContainer/MemberGroupsActiveFilterCallbackListener.php
    namespace App\EventListener\DataContainer;
    
    
    use Contao\CoreBundle\ServiceAnnotation\Callback;
    use Contao\DataContainer;
    use Symfony\Contracts\Translation\TranslatorInterface;
    
    
    
    
    class MemberGroupsActiveFilterCallbackListener
    {
        /**
         * @Callback(table="tl_member", target="fields.groups.options")
         */
        private Connection $connection;
        private TranslatorInterface $translator;
    
    
        public function __construct(Connection $connection, TranslatorInterface $translator)
        {
            $this->connection = $connection;
            $this->translator = $translator;
        }
    
    
        public function __invoke(): array
        {
            $groups = $this->connection->fetchAllAssociative('SELECT id, name FROM tl_member_group WHERE disable != 1 AND tstamp>0 ORDER BY name');
    
    
            foreach ($groups as $group) {
                $options[$group['id']] = $group['name'];
            }
    
    
            return $options;
            
        }
    }
    ?>

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

    Standard

    Dir fehlt jetzt $options = [];
    » sponsor me via GitHub or PayPal or Revolut

  29. #29
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.273

    Standard

    Auch damit leider volle Liste (inkl. inaktive). Ist es relevant ob invoke in den Klammern DataContainer $dc hat oder nicht?


    Code:
    <?php
    // src/EventListener/DataContainer/MemberGroupsActiveFilterCallbackListener.php
    namespace App\EventListener\DataContainer;
    
    
    use Contao\CoreBundle\ServiceAnnotation\Callback;
    use Contao\DataContainer;
    use Symfony\Contracts\Translation\TranslatorInterface;
    
    
    
    
    class MemberGroupsActiveFilterCallbackListener
    {
        /**
         * @Callback(table="tl_member", target="fields.groups.options")
         */
        private Connection $connection;
        private TranslatorInterface $translator;
    
    
        public function __construct(Connection $connection, TranslatorInterface $translator)
        {
            $this->connection = $connection;
            $this->translator = $translator;
        }
    
    
        public function __invoke(): array
        {
            $options = [];
            $groups = $this->connection->fetchAllAssociative('SELECT id, name FROM tl_member_group WHERE disable != 1 AND tstamp>0 ORDER BY name');
    
    
            foreach ($groups as $group) {
                $options[$group['id']] = $group['name'];
            }
    
    
            return $options;
            
        }
    }
    ?>

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

    Standard

    Deine @Callback Annotation ist immer noch nicht an der richrtigen Stelle.
    » sponsor me via GitHub or PayPal or Revolut

  31. #31
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.273

    Standard

    Das heisst? Die Stelle wo die Datei liegt? Oder im Snipped "use Contao\CoreBundle\ServiceAnnotation\Callback;"

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

    Standard

    Statt
    PHP-Code:
    class MemberGroupsActiveFilterCallbackListener
    {
        
    /**
         * @Callback(table="tl_member", target="fields.groups.options")
         */ 
    sollte es
    PHP-Code:
    /**
     * @Callback(table="tl_member", target="fields.groups.options")
     */
    class MemberGroupsActiveFilterCallbackListener

    sein.
    » sponsor me via GitHub or PayPal or Revolut

  33. #33
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.273

    Standard

    OK, wenn ich jetzt die Datei hochlade und den Cache lösche bringt der Manager ab. Aber wir nähern uns :-)

    Danke für deine Geduld :-P

    Code:
    In DefinitionErrorExceptionPass.php line 54:
    
    5
    6
    Cannot autowire service "App\EventListener\DataContainer\MemberGroupsActive
    7
    FilterCallbackListener": argument "$connection" of method "__construct()" h
    8
    as type "App\EventListener\DataContainer\Connection" but this class was not
    9
    found.
    13
    # Process terminated with exit code 1
    14
    # Result: General error

    Code:
    <?php
    // src/EventListener/DataContainer/MemberGroupsActiveFilterCallbackListener.php
    namespace App\EventListener\DataContainer;
    
    
    use Contao\CoreBundle\ServiceAnnotation\Callback;
    use Contao\DataContainer;
    
    
    
    
    /**
     * @Callback(table="tl_member", target="fields.groups.options")
     */
    class MemberGroupsActiveFilterCallbackListener
    { 
        private Connection $connection;
    
    
        public function __construct(Connection $connection)
        {
            $this->connection = $connection;
        }
    
    
        public function __invoke(): array
        {
            $options = [];
            $groups = $this->connection->fetchAllAssociative('SELECT id, name FROM tl_member_group WHERE disable != 1 AND tstamp>0 ORDER BY name');
    
    
            foreach ($groups as $group) {
                $options[$group['id']] = $group['name'];
            }
    
    
            return $options;        
        }
    }
    ?>

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

    Standard

    Dir fehlt das use statement für Connection.
    » sponsor me via GitHub or PayPal or Revolut

  35. #35
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.273

    Standard

    Ahhhh oben beim Translator zu viel rausgehauen.

    JAAAA! Es geht!!! Mega!!!! Danke danke! Sorry für die schwere Geburt!



    Hier noch mal das fertige Snipped falls es noch jemand braucht:

    Zeige nur aktive Mitgliedergruppen

    Dateipfad: src/EventListener/DataContainer/MemberGroupsActiveFilterCallbackListener.php

    Code:
    <?php
    // src/EventListener/DataContainer/MemberGroupsActiveFilterCallbackListener.php
    namespace App\EventListener\DataContainer;
    
    
    use Contao\CoreBundle\ServiceAnnotation\Callback;
    use Contao\DataContainer;
    use Doctrine\DBAL\Connection;
    
    
    /**
     * @Callback(table="tl_member", target="fields.groups.options")
     */
    class MemberGroupsActiveFilterCallbackListener
    { 
        private Connection $connection;
    
    
        public function __construct(Connection $connection)
        {
            $this->connection = $connection;
        }
    
    
        public function __invoke(): array
        {
            $options = [];
            $groups = $this->connection->fetchAllAssociative('SELECT id, name FROM tl_member_group WHERE disable != 1 ORDER BY name');
    
    
            foreach ($groups as $group) {
                $options[$group['id']] = $group['name'];
            }
    
    
            return $options;        
        }
    }
    ?>
    Geändert von Kahmoon (01.08.2022 um 15:54 Uhr)

  36. #36
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.935

    Standard

    Schön, daß, es nun funktioniert. Ein Problem sehe ich aber noch: wenn Du nun einen bestehendes Mitglied bearbeitest, das eine mittlerweile unveröffentlichte Gruppe zugeordnet bekommen hatte, wird diese beim Speichern entfernt. Ich weiß nicht, ob das für euch ein Problem ist, aber so könntet ihr die nicht mehr benötigten Mitgliedergruppen wahrscheinlich auch gleich löschen, anstelle sie zu deaktivieren.
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  37. #37
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.273

    Standard

    Hmm das ist ein gutes Argument. In der Regel bearbeite ich alte Schüler nicht mehr.

    Problem in Contao ist leider das „unbekannte Option“ beim Mitglied verbleibt, wenn man die Gruppe löscht. Diese Option taucht dann leider auch im Filter der Mitgliederübersicht auf. Diese wird sehr intensiv benutzt.

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

    Standard

    Zitat Zitat von fiedsch Beitrag anzeigen
    Schön, daß, es nun funktioniert. Ein Problem sehe ich aber noch: wenn Du nun einen bestehendes Mitglied bearbeitest, das eine mittlerweile unveröffentlichte Gruppe zugeordnet bekommen hatte, wird diese beim Speichern entfernt. Ich weiß nicht, ob das für euch ein Problem ist, aber so könntet ihr die nicht mehr benötigten Mitgliedergruppen wahrscheinlich auch gleich löschen, anstelle sie zu deaktivieren.
    Nein, wird von Contao nicht entfernt. Das bleibt (so wie überall) als unbekannte Option bestehen.
    » sponsor me via GitHub or PayPal or Revolut

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
  •