Ergebnis 1 bis 7 von 7

Thema: Label eines Feldes von tl_module bei bestimmten Modul ändern

  1. #1
    Contao-Fan
    Registriert seit
    29.06.2016.
    Beiträge
    549

    Standard Label eines Feldes von tl_module bei bestimmten Modul ändern

    Hallo,

    ich möchte das Label des tl_module-Felds 'imgSize' ändern – allerdings nur bei dem von mir erstellten Modul.
    Das Label lautet standardmäßig "Bildgröße".
    Wenn ich in meinem Modul das Feld verwende, sollte das Label jedoch "Bildgröße Hauptbild" lauten.
    ... geht das?

    Ich nehme an ich muss in der tl_module.php meines Moduls irgendwie:
    - abfragen ob mein Modul gerade verwendet wird
    - und dann das Label ändern

    Hier als Pseudocode wie ich mir das vorstelle:
    PHP-Code:
    if($activeModule == 'mein-modul') {
      
    $GLOBALS['TL_DCA']['tl_module']['fields']['imgSize']['label'] = array("Bildgröße Hauptbild","etc.);

    Oder bin ich gezwungen ein zusätzliches tl_module-Feld anzulegen?

    Danke für eure Hilfe!

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

    Standard

    Du kannst das Label dynamisch über einen config.onload Callback ändern.
    » sponsor me via GitHub or Revolut

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

    Support Contao

    Standard

    Das musst in einem onload-Callback lösen: https://docs.contao.org/dev/referenc...#config-onload

  4. #4
    Contao-Fan
    Registriert seit
    29.06.2016.
    Beiträge
    549

    Standard

    Ok, danke schon mal.

    Leider bekomme ich den Callback nicht zum Laufen
    Hier mein Versuch, bei dem dump() leider nichts ausgibt:

    PHP-Code:

    // contao-projects-bundle/src/EventListener/DataContainer/ModuleListener.php

    namespace GeorgPreissl\Projects\EventListener\DataContainer;

    #[AsCallback(table: 'tl_module', target: 'config.onload')]
    class ModuleListener
    {
        private 
    $requestStack;

        public function 
    __construct(RequestStack $requestStack)
        {
            
    $this->requestStack $requestStack;
        }

        public function 
    __invoke(DataContainer|null $dc null): void
        
    {
            
    dump($dc);
        }


    Die services.yml (denke die braucht es damit das klappt, oder?) sieht bei mir so aus:
    PHP-Code:
    services:
        
    _defaults:
            
    autoconfiguretrue
            autowire
    true
            
    public: false
            bind
    :
                
    $projectDir'%kernel.project_dir%'

        
    GeorgPreissl\Projects\:
            
    resource'../src'
            
    exclude'../../{ContentElement,FrontendModule,Model}' 

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

    Standard

    Poste einen Link zu einem öffentlichen Repository.
    » sponsor me via GitHub or Revolut

  6. #6
    Contao-Fan
    Registriert seit
    29.06.2016.
    Beiträge
    549

    Standard

    Danke für eure Hilfe.

    Hab jetzt meinen Fehler entdeckt, ich hatte folgendes vergessen:
    PHP-Code:
    use Contao\CoreBundle\DependencyInjection\Attribute\AsCallback
    Das ist jetzt meine funktionierende Lösung:

    PHP-Code:
    namespace GeorgPreissl\Projects\EventListener\DataContainer;

    use 
    Contao\DataContainer;
    use 
    Contao\CoreBundle\DependencyInjection\Attribute\AsCallback;
    use 
    Contao\Database;

    #[AsCallback(table: 'tl_module', target: 'config.onload')]
    class ModuleListener
    {
        public function 
    __invoke(DataContainer|null $dc null): void
        
    {
            
    $result Database::getInstance()
            ->
    prepare("SELECT type FROM tl_module WHERE id=?")
            ->
    execute($dc->id);            
            if(
    $result->type == "projectsreader") {
                
    $GLOBALS['TL_DCA']['tl_module']['fields']['imgSize']['label'] = array("Bildgröße Hauptbild","Hier können Sie die Abmessungen des Hauptbilds festlegen.");
            };
        }


    Vielleicht braucht's ja mal jemand

  7. #7
    Alter Contao-Hase
    Registriert seit
    24.02.2021.
    Beiträge
    1.477
    Partner-ID
    11715
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von thesweetg Beitrag anzeigen
    Danke für eure Hilfe.

    Hab jetzt meinen Fehler entdeckt, ich hatte folgendes vergessen:
    PHP-Code:
    use Contao\CoreBundle\DependencyInjection\Attribute\AsCallback
    Das ist jetzt meine funktionierende Lösung:

    PHP-Code:
    namespace GeorgPreissl\Projects\EventListener\DataContainer;

    use 
    Contao\DataContainer;
    use 
    Contao\CoreBundle\DependencyInjection\Attribute\AsCallback;
    use 
    Contao\Database;

    #[AsCallback(table: 'tl_module', target: 'config.onload')]
    class ModuleListener
    {
        public function 
    __invoke(DataContainer|null $dc null): void
        
    {
            
    $result Database::getInstance()
            ->
    prepare("SELECT type FROM tl_module WHERE id=?")
            ->
    execute($dc->id);            
            if(
    $result->type == "projectsreader") {
                
    $GLOBALS['TL_DCA']['tl_module']['fields']['imgSize']['label'] = array("Bildgröße Hauptbild","Hier können Sie die Abmessungen des Hauptbilds festlegen.");
            };
        }


    Vielleicht braucht's ja mal jemand
    Und jetzt noch mit der Connection, dann wäre es noch schöner (ungetestet)

    PHP-Code:
    namespace GeorgPreissl\Projects\EventListener\DataContainer;

    use 
    Contao\DataContainer;
    use 
    Contao\CoreBundle\DependencyInjection\Attribute\AsCallback;
    use 
    Doctrine\DBAL\Connection;

    #[AsCallback(table: 'tl_module', target: 'config.onload')]
    class ModuleListener
    {
        public function 
    __construct(private readonly Connection $connection)
        {}

        public function 
    __invoke(DataContainer|null $dc null): void
        
    {
            
    $result $this->connection->fetchOne('SELECT type FROM tl_module WHERE id=?', [$dc->id]);

            if (
    $result->type === 'projectsreader')
            {
                
    $GLOBALS['TL_DCA']['tl_module']['fields']['imgSize']['label'] = ["Bildgröße Hauptbild","Hier können Sie die Abmessungen des Hauptbilds festlegen."];
            }
        }


Aktive Benutzer

Aktive Benutzer

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

Berechtigungen

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