5.9 Hooks: custom
In diesem Abschnitt beschäftigen wir uns mit den Hooks für individuelle Anpassungen.
Hook: addCustomRegexp
Der addCustomRegexp Hook wird aufgerufen, wenn ein unbekannter regulärer Ausdruck gefunden wird. Im Abschnitt "Abschnitt: Fields > eval > rgxp" haben wir die regulären Ausdrücke besprochen, die Contao mitliefert. Will man einen eingenen definieren, trägt man den Namen im DCA ein und kann ihn dann mit diesem Hook überprüfen.
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(string $regexp, $input, Widget $widget): string
{
if ('plz' === $regexp) {
$exp = '\b((?:0[1-46-9]\d{3})|(?:[1-357-9]\d{4})|(?:[4][0-24-9]\d{3})|(?:[6][013-9]\d{3}))\b';
if (!preg_match('/' . $exp . '/', $input)) {
$widget->addError('Invalid postal code.');
}
return true;
}
return false;
}
}
Parameter:
Parameter | Typ | Beschreibung |
---|---|---|
$regexp |
string |
String mit dem regulären Ausdruck |
$input |
mixed |
Der Wert, der in das Feld im Backend eingegeben wurde und der überprüft werden muss |
$widget |
\Contao\Widget |
Die Instanz des Widgets für das Eingebefeld im Backend |
Rückgabewert:
Typ | Beschreibung |
---|---|
bool |
Wenn der Ausdruck bearbeitet und der Wert überprüft wurd wird true zurückgegeben, wenn der Hook nicht für die Überprüfung zuständdig ist, wird false zurückgegeben. |
Referenz im Contao Core: \Contao\Widget#L1078-L1094
Hook: replaceInsertTags
Der replaceInsertTags Hook wird aufgerufen, wenn
ein unbekannter InsertTag ersetzt werden soll. Mit InsertTags haben wir uns noch nicht beschäftigt. Sie dienen der
Ausgabe bestimmter Informationen an beliebiger Stelle. So kann man z. B. mit dem Tag page::pageTitle
den Titel
der Seiten ausgeben lassen.
Eine Liste aller InsertTags befindet sich im Handbuch. Dort befindet sich auch eine Beschreibung, wie man eigene InsertTags erstellt. Wir werden uns in einem späteren Text noch damit auseinandersetzen.
Registrierung
# /src/Ctocb/Example/Resources/config/services.yml
services:
# Hooks
Ctocb\Example\Classes\Contao\Hooks\ExampleHook:
public: true
tags:
- { name: contao.hook, hook: replaceInsertTags, method: handleHook, priority: 1024 }
Klasse
<?php
namespace Ctocb\Example\Classes\Contao\Hooks;
class ExampleHook {
public function handleHook(
string $insertTag,
bool $useCache,
string $cachedValue,
array $flags,
array $tags,
array $cache,
int $_rit,
int $_cnt
): string|bool {
if ('mytag' === $insertTag) {
return 'mytag replacement';
}
return false;
}
}
Parameter:
Parameter | Typ | Beschreibung |
---|---|---|
$insertTag |
string |
String mit dem InsertTag |
$useCache |
bool |
Gibt an, ob der Wert gecached werden soll |
$cachedValue |
string |
Die Ersetzung für den Tag, falls er gecached wurde |
$flags |
array |
Flags des Tags (s. Insert tag flags) |
$tags |
array |
Aufgeteilter Seiteninhalt, um den Tag zu ersetzen |
$cache |
array |
Alle bisher gecachten Tags dieser Seite |
$_rit |
int |
Zähler für das Itterieren der Tags |
$_cnt |
int |
Anzahl der Tags |
Rückgabewert:
Typ | Beschreibung |
---|---|
string|bool |
Wird der Tag ersetzt, muss die Ersetzung zurückgegeben werden, sonst false |
Referenz im Contao Core: \Controller\InsertTags#L1016-L1035
Hook: insertTagFlags
Der insertTagFlags Hook wird aufgerufen, wenn ein unbekannter Filter (Flag) in einem InsertTag gefunden wird. Er ermöglicht die nachträgliche Bearbeitung der Ersetzung des eigentlichen Tags.
Registrierung
# /src/Ctocb/Example/Resources/config/services.yml
services:
# Hooks
Ctocb\Example\Classes\Contao\Hooks\ExampleHook:
public: true
tags:
- { name: contao.hook, hook: insertTagFlags, method: handleHook, priority: 1024 }
Klasse
<?php
namespace Ctocb\Example\Classes\Contao\Hooks;
class ExampleHook {
public function handleHook(
string $flag,
string $tag,
string $cachedValue,
array $flags,
bool $useCache,
array $tags,
array $cache,
int $_rit,
int $_cnt
): string|bool {
if ('monthNamesAustria' === $flag) {
return str_replace(['Januar', 'Februar'], ['Jänner', 'Feber'], $cachedValue);
}
// Indicate that we did not handle that flag
return false;
}
}
Parameter:
Parameter | Typ | Beschreibung |
---|---|---|
$flag |
string |
String mit dem Filter des InsertTags |
$tag |
string |
String mit dem Tag |
$cachedValue |
string |
Die Ersetzung für den Tag, falls er gecached wurde |
$flags |
array |
Flags des Tags (s. Insert tag flags) |
$useCache |
bool |
Gibt an, ob der Wert gecached werden soll |
$tags |
array |
Aufgeteilter Seiteninhalt, um den Tag zu ersetzen |
$cache |
array |
Alle bisher gecachten Tags dieser Seite |
$_rit |
int |
Zähler für das Itterieren der Tags |
$_cnt |
int |
Anzahl der Tags |
Rückgabewert:
Typ | Beschreibung |
---|---|
string|bool |
Wird der Filter bearbeitet, muss die Ersetzung zurückgegeben werden, sonst false |
Referenz im Contao Core: \Contao\InsertTags#L1112-L1132