[3404 Aufrufe]

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