[736 Aufrufe]

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