Ergebnis 1 bis 11 von 11

Thema: 5.6x Inhaltselement HTML im Backend für Redakteure ausblenden

  1. #1
    Contao-Fan
    Registriert seit
    22.10.2009.
    Beiträge
    299

    Standard 5.6x Inhaltselement HTML im Backend für Redakteure ausblenden

    Hallo zusammen,

    ich habe für Redakteure die Bearbeitung des Inhaltselementes HTML gesperrt. Jetzt fände ich es schön, wenn sie dieses Element im Backend gar nicht mehr sehen, um Verwirrung zu vermeiden.

    Versucht habe ich das über einen Hook src/EventListener/ModifyContentListListener.php:
    PHP-Code:
    namespace App\EventListener;

    use 
    Contao\BackendUser;
    use 
    Contao\DataContainer;

    class 
    ModifyContentListListener
    {
        public function 
    __invoke(DataContainer $dc): void
        
    {
            
    $user BackendUser::getInstance();

            if (
    $user->isAdmin) {
                return;
            }

            
    // Hook an die onload_callback anhängen
            
    $GLOBALS['TL_DCA']['tl_content']['list']['sorting']['child_record_callback'] = static function (
                array 
    $arrRow
            
    ) {
                
    // HTML-Inhaltselement nicht anzeigen
                
    if ($arrRow['type'] === 'html') {
                    return 
    ''// Rückgabe leer -> keine Anzeige
                
    }

                
    // Standardanzeige erzeugen
                
    return \Contao\Controller::getContentElement($arrRow['id']);
            };
        }

    Die services.yml:
    PHP-Code:
    services:
      
    App\EventListener\ModifyContentListListener:
        
    tags:
          - { 
    namecontao.hookhookloadDataContainer 
    und die config.php:
    PHP-Code:
    use App\EventListener\ModifyContentListListener;

    $GLOBALS['TL_HOOKS']['loadDataContainer'][] = [ModifyContentListListener::class, '__invoke']; 
    Wenn ich jedoch den Cache löschen möchte, kommt die Fehlermeldung:
    „Class "App\EventListener\ModifyContentListListener" does not exist“

    Was mache ich verkehrt?

    Gruß
    Ignatz

  2. #2
    Contao-Fan
    Registriert seit
    22.10.2009.
    Beiträge
    299

    Standard

    Inzwischen habe ich herausgefunden, dass man dazu jetzt den Symfony Event Dispatcher benutzen sollte. Da bin ich mit meinem Latein am Ende.

    Hat das schon jemand gelöst und kennt jemand eine Estension, die das kann? Früher gabe es ce_access, aber das hat sich wohl erledigt.

  3. #3
    Contao-Urgestein
    Registriert seit
    24.02.2021.
    Beiträge
    1.659
    Partner-ID
    11715
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von Ignatz Beitrag anzeigen
    Hat das schon jemand gelöst und kennt jemand eine Estension, die das kann? Früher gabe es ce_access, aber das hat sich wohl erledigt.
    ce_access ist seit Contao 4.9 im Core.
    - Since Contao 4.9, this extension is part of the Contao core. Please remove this package from your composer.json to be able to update your dependencies.

    Zitat Zitat von Ignatz Beitrag anzeigen
    Inzwischen habe ich herausgefunden, dass man dazu jetzt den Symfony Event Dispatcher benutzen sollte. Da bin ich mit meinem Latein am Ende.
    Wie hast du das denn herausgefunden?

    Andere Frage, was soll dein Code eigentlich machen? Du möchtest die Ansicht anpassen, damit du das Label anpassen kannst? Dafür gibt es auch den Label callback (Die Operations wirst du weiterhin haben).
    Du willst das Label einfach nicht ausgeben? Dann sieht man die Reihe trotzdem.. halt ohne Title (Die disabled Operations wirst du weiterhin haben).

    Den ganzen Record aus der Reihe zu "killen" kann man sicher auch mit setzen einer CSS-Klasse und dann dem CSS :has Selektor.

    Zu deinem Latein

    In deinem Code nutzt den loadDataContainer Hook, damit du dann einen Callback setzt... - Warum? Warum nicht sofort den child record callback nutzen?
    Taggst diesen über deine services yaml - Warum? Im App Namespace ist es eh autowired, das ist auch in der Contao Doku beschrieben

    Das braucht es alles nicht, wer hat dir das so beigebracht?
    Falls die Antwort von einem LLM wie ChatGPT kommt, dann gilt... das LLM hat hier halluziniert... frag lieber sofort im Forum nach und bitte nicht in "allgemeine Inhaltselemente" sondern in "Entwicklerfragen".

    Und nun kurz zum Beispiel wie du dein Vorhaben übersetzt als ChildRecordCallback direkt umsetzen könntest

    https://docs.contao.org/dev/referenc...cks/#callbacks

    Ungetestet wäre dein gesamter Code dann eher sowas:
    PHP-Code:
    // src/EventListener/DataContainer/RemoveHTMLContentElementTitleListener.php

    namespace App\EventListener\DataContainer;

    use 
    Contao\CoreBundle\DependencyInjection\Attribute\AsCallback;

    #[AsCallback(table: 'tl_content', target: 'list.sorting.child_record')]
    class RemoveHTMLContentElementTitleListener
    {
        public function 
    __invoke(array $row): string
        
    {
            return 
    match ($row['type']) {
                
    'html''unfiltered_html' => '',
                default => 
    $row['headline'] ?? ''
            
    };
        }

    ___

    Aber die ganze Reihe kannst du nicht einfach ausblenden. Mit CSS und display: none mit einer Class auf :has.. sollte es aber gehen.

  4. #4
    Community-Moderatorin & Contao-Urgestein Avatar von mlweb
    Registriert seit
    10.07.2011.
    Beiträge
    7.525
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Moderation: Beitrag in Entwicklerfragen verschoben
    Geändert von mlweb (19.09.2025 um 11:34 Uhr)
    Ich habe Dir mit meinen Hinweisen geholfen und Du möchtest Dich bedanken?
    Unterstütze bitte das Contao-Projekt (Button Links)
    Weitere Spendenmöglichkeiten
    ------------------------------------------------------------------------------------------------------
    Contao-Dokumentation: Contao-Handbuch und Contao-Entwickler-Doku
    Contao-Online-Video-Kurse: Contao Academy
    Funktionalität erweitern: Contao-Erweiterungen

    Für Dinge die man mit html5 und css3 lösen kann, braucht man kein javascript.




  5. #5
    Contao-Fan
    Registriert seit
    22.10.2009.
    Beiträge
    299

    Standard

    Ich möchte erreichen, das Redakteure im Backend das Content-Element „HTML“ gar nicht erst sehen. Sie sind davon verwirrt.
    Anhang 28058

    Ach ja, die Entwicklerfragen hatte ich gesucht und leider übersehen. Danke für’s verschieben.

  6. #6
    Community-Moderatorin & Contao-Urgestein Avatar von mlweb
    Registriert seit
    10.07.2011.
    Beiträge
    7.525
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Mal eine andere Frage: Nutzt Du das HTML-Element grundsätzlich als Wrapper?
    Falls ja, wäre vielleicht die Elementgruppe ggf. mit angepasstem Template etwas für Dich. Dann dürfte dieses Element nicht mehr verwirren m.E.
    Ich habe Dir mit meinen Hinweisen geholfen und Du möchtest Dich bedanken?
    Unterstütze bitte das Contao-Projekt (Button Links)
    Weitere Spendenmöglichkeiten
    ------------------------------------------------------------------------------------------------------
    Contao-Dokumentation: Contao-Handbuch und Contao-Entwickler-Doku
    Contao-Online-Video-Kurse: Contao Academy
    Funktionalität erweitern: Contao-Erweiterungen

    Für Dinge die man mit html5 und css3 lösen kann, braucht man kein javascript.




  7. #7
    Contao-Fan
    Registriert seit
    22.10.2009.
    Beiträge
    299

    Standard

    Zitat Zitat von zoglo Beitrag anzeigen
    ce_access ist seit Contao 4.9 im Core.
    - Since Contao 4.9, this extension is part of the Contao core. Please remove this package from your composer.json to be able to update your dependencies.

    Wie hast du das denn herausgefunden?
    https://docs.contao.org/dev/framework/hooks/#hooks gleich ganz oben.

  8. #8
    Contao-Fan
    Registriert seit
    22.10.2009.
    Beiträge
    299

    Standard

    Nein, ich nutze das HTML-Element nicht grundsätzlich als Wrapper. Nur machmal und dann in verschiedenen Versionen.

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

    Standard

    Ich würde einfach einen eigenen child_record_callback umsetzen, und dort dann den child_record_callback aus dem Core aufrufen, wenn der User ein Admin oder der Element-Type nicht html ist - und ansonsten nur einen leeren String zurückgeben.
    » sponsor me via GitHub or Revolut

  10. #10
    Contao-Urgestein
    Registriert seit
    24.02.2021.
    Beiträge
    1.659
    Partner-ID
    11715
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Ich würde einfach einen eigenen child_record_callback umsetzen, und dort dann den child_record_callback aus dem Core aufrufen, wenn der User ein Admin oder der Element-Type nicht html ist - und ansonsten nur einen leeren String zurückgeben.
    Würde aber nur den Title entfernen, da wir im Listing der content-elemente dann noch die operations sehen.. halt nur nicht mehr den Record (tl_right und tl_left)

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

    Standard

    Ja stimmt, so kann man da nicht eingerifen.

    Du könntest aber einen onload_callback machen und dort dann $GLOBALS['TL_DCA']['tl_example']['list']['sorting']['filter'] setzen. zB

    PHP-Code:
    $GLOBALS['TL_DCA']['tl_example']['list']['sorting']['filter'][] = "type != 'html'"
    » sponsor me via GitHub or Revolut

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
  •