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:
- { name: contao.hook, hook: loadDataContainer }
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