5.8 Hooks: controller
In diesem Abschnitt beschäftigen wir uns mit den Hooks für die Controller. Dies meint allerdings nicht die Controller, wie Symfony sie versteht, sondern alles, was aus dem Controller von Contao aufgerufen wird.
Hook: generateFrontendUrl
Dieser Hook ist veraltet und kann unter Contao 5 nicht mehr verwendet werden!
Der generateFrontendUrl Hook wird aufgerufen, wenn eine Url für das Frontend erstellt wird.
Registrierung
# /src/Ctocb/Example/Resources/config/services.yml
services:
# Hooks
Ctocb\Example\Classes\Contao\Hooks\ExampleHook:
public: true
tags:
- { name: contao.hook, hook: generateFrontendUrl, method: handleHook, priority: 1024 }
Klasse
<?php
namespace Ctocb\Example\Classes\Contao\Hooks;
class ExampleHook {
public function handleHook(array $page, string $params, string $url): string
{
// Create or modify $url …
return $url;
}
}
Parameter:
Parameter | Typ | Beschreibung |
---|---|---|
$page |
array |
Array mit den Daten aus tl_page für die Seite deren Url erzeugt werden soll |
$params |
string |
String mit zusätzlichen Parametern, die zwischen dem Alias und dem Suffix eingefügt werden sollen |
$url |
string |
Die von Contao erzeuge Url |
Rückgabewert:
Typ | Beschreibung |
---|---|
string |
Die überarbeitete Url |
Referenz im Contao Core: \Contao\Controller.php#L1163-L1170 und \Contao\PageModel.php#L1140-L1151
Hook: getArticle
Der getArticle Hook wurde bereits unter "Hooks: article" besprochen.
Hook: getArticles
Der getArticles Hook wurde bereits unter "Hooks: article" besprochen.
Hook: getContentElement
Der getContentElement Hook wird aufgerufen, wenn ein Inhaltselement gerendert wird.
Registrierung
# /src/Ctocb/Example/Resources/config/services.yml
services:
# Hooks
Ctocb\Example\Classes\Contao\Hooks\ExampleHook:
public: true
tags:
- { name: contao.hook, hook: getContentElement, method: handleHook, priority: 1024 }
Klasse
<?php
namespace Ctocb\Example\Classes\Contao\Hooks;
use Contao\ContentModel;
class ExampleHook {
public function handleHook(ContentModel $contentModel, string $buffer, $element): string
{
// Modify or create new $buffer here ...
return $buffer;
}
}
Parameter:
Parameter | Typ | Beschreibung |
---|---|---|
$contentModel |
\Contao\ContentModel |
Model mit den Daten aus tl_content |
$buffer |
string |
Erzeugte Inhalt für das Inhaltselement |
$element |
object |
Instanz des Inhaltselements |
Rückgabewert:
Typ | Beschreibung |
---|---|
string |
Der überarbeitete Inhalt |
Referenz im Contao Core: \Contao\Controller#L476-L483
Hook: getForm
Der getForm Hook erlaubt das Manipulieren von Formularen.
Dieser Hook wird nur ausgeführt, wenn das Formular über den InsertTag insert_form::*
eingefügt wird!
Registrierung
# /src/Ctocb/Example/Resources/config/services.yml
services:
# Hooks
Ctocb\Example\Classes\Contao\Hooks\ExampleHook:
public: true
tags:
- { name: contao.hook, hook: getForm, method: handleHook, priority: 1024 }
Klasse
<?php
namespace Ctocb\Example\Classes\Contao\Hooks;
use Contao\FormModel;
use Contao\Form;
class ExampleHook {
public function handleHook(FormModel $formModel, string $buffer, Form $form): string
{
if (2 === (int) $form->id) {
// Do something ...
}
return $buffer;
}
}
Parameter:
Parameter | Typ | Beschreibung |
---|---|---|
$formModel |
\Contao\FormModel |
Model mit den Daten aus tl_form |
$buffer |
string |
Das HTML des Formulars |
$form |
\Contao\Form |
Instanz des Formulars |
Rückgabewert:
Typ | Beschreibung |
---|---|
string |
Der überarbeitete Inhalt |
Referenz im Contao Core: \Contao\Controller#L540-L547
Hook: getFrontendModule
Der getFrontendModule Hook erlaubt das Manipulieren von Frontend Modulen.
Dieser Hook wird nur unter bestimmten Bedingungen ausgeführt. Destil befinden sich im Handbuch
Registrierung
# /src/Ctocb/Example/Resources/config/services.yml
services:
# Hooks
Ctocb\Example\Classes\Contao\Hooks\ExampleHook:
public: true
tags:
- { name: contao.hook, hook: getFrontendModule, method: handleHook, priority: 1024 }
Klasse
<?php
namespace Ctocb\Example\Classes\Contao\Hooks;
use Contao\ModuleModel;
class ExampleHook {
public function handleHook(ModuleModel $model, string $buffer, $module): string
{
// Wrap a specific module in an additional wrapper div
if (2 === (int) $model->id) {
return '<div class="module">' . $buffer . '</div>';
}
return $buffer;
}
}
Parameter:
Parameter | Typ | Beschreibung |
---|---|---|
$formModel |
\Contao\ModuleModel |
Model mit den Daten des Moduls |
$buffer |
string |
Das HTML des Moduls |
$module |
object |
Instanz der für das Rendern des Moduls zuständigen Klasse |
Rückgabewert:
Typ | Beschreibung |
---|---|
string |
Der überarbeitete Inhalt |
Referenz im Contao Core: \Contao\Controller.php#L319-L326
Hook: getPageStatusIcon
Der getPageStatusIcon Hook wird aufgerufen, wenn das Statusicon einer Seite erzeugt wird.
Registrierung
# /src/Ctocb/Example/Resources/config/services.yml
services:
# Hooks
Ctocb\Example\Classes\Contao\Hooks\ExampleHook:
public: true
tags:
- { name: contao.hook, hook: getPageStatusIcon, method: handleHook, priority: 1024 }
Klasse
<?php
namespace Ctocb\Example\Classes\Contao\Hooks;
class ExampleHook {
public function handleHook($page, string $image): string
{
if ('my_page' === $page->type) {
return 'path/to/custom_icon.svg';
}
return $image;
}
}
Parameter:
Parameter | Typ | Beschreibung |
---|---|---|
$page |
\Contao\PageModel|\Contao\Database\Result|\stdClass |
Daten aus tl_page |
$image |
string |
Dateiname des Icons |
Rückgabewert:
Typ | Beschreibung |
---|---|
string |
Pfad zum Statusicon |
Referenz im Contao Core: \Contao\Controller#L614-L621
Hook: isVisibleElement
Der isVisibleElement Hook wird aufgerufen, wenn festgestellt werden muss, ob ein Inhaltselement im Frontend sichtbar ist oder nicht.
Registrierung
# /src/Ctocb/Example/Resources/config/services.yml
services:
# Hooks
Ctocb\Example\Classes\Contao\Hooks\ExampleHook:
public: true
tags:
- { name: contao.hook, hook: isVisibleElement, method: handleHook, priority: 1024 }
Klasse
<?php
namespace Ctocb\Example\Classes\Contao\Hooks;
use Contao\Model;
class ExampleHook {
public function handleHook(Model $element, bool $isVisible): bool
{
if ($element instanceof \Contao\ContentModel) {
// Check if this content element can be shown
if ($this->myElementCanBeShownInFrontend($element)) {
return true;
}
}
// Otherwise we don't want to change the visibility state
return $isVisible;
}
}
Parameter:
Parameter | Typ | Beschreibung |
---|---|---|
$element |
Contao\Model |
Daten aus tl_article , tl_content oder tl_module |
$isVisible |
bool |
Von Contao festgelegte Sichbarkeit |
Rückgabewert:
Typ | Beschreibung |
---|---|
bool |
true wenn das Element angezeigt werden soll, sonst false |
Referenz im Contao Core: \Contao\Controller#L674-L681
Hook: postDownload
Der postDownload Hook wird aufgerufen, nachdem eine Datei mit dem Inhaltselement Download oder Downloads herruntergeladen wurde.
Registrierung
# /src/Ctocb/Example/Resources/config/services.yml
services:
# Hooks
Ctocb\Example\Classes\Contao\Hooks\ExampleHook:
public: true
tags:
- { name: contao.hook, hook: postDownload, method: handleHook, priority: 1024 }
Klasse
<?php
namespace Ctocb\Example\Classes\Contao\Hooks;
class ExampleHook {
public function handleHook(string $file): void
{
// Do something ...
}
}
Parameter:
Parameter | Typ | Beschreibung |
---|---|---|
$file |
string |
Name der runtergeladenen Datei |
Rückgabewert:
keiner
Referenz im Contao Core: \Contao\Controller.php#L1257-L1264
Hook: replaceDynamicScriptTags
Der replaceDynamicScriptTags Hook wird aufgerufen,
bevor Contao die script
-Tags ersetzt. Mit dem Hook kann man die gewünschten Tags selber ersetzten.
Registrierung
# /src/Ctocb/Example/Resources/config/services.yml
services:
# Hooks
Ctocb\Example\Classes\Contao\Hooks\ExampleHook:
public: true
tags:
- { name: contao.hook, hook: replaceDynamicScriptTags, method: handleHook, priority: 1024 }
Klasse
<?php
namespace Ctocb\Example\Classes\Contao\Hooks;
use Contao\CoreBundle\Framework\ContaoFramework;
class ExampleHook {
public function handleHook(string $buffer): string
{
$nonce = '';
if (method_exists(ContaoFramework::class, 'getNonce')) {
$nonce = '_'.ContaoFramework::getNonce();
}
return str_replace("[[TL_CSS$nonce]]", "[[TL_CSS$nonce]]".'<link rel="stylesheet" href="assets/custom.css">', $buffer);
}
}
Parameter:
Parameter | Typ | Beschreibung |
---|---|---|
$buffer |
string |
Ausgabe der aktuellen Seite |
Rückgabewert:
Typ | Beschreibung |
---|---|
string |
Geänderte Inhalt der aktuellen Seite |
Referenz im Contao Core: \Contao\Controller#L710-L717