[3571 Aufrufe]

Hooks: modules

In diesem Abschnitt beschäftigen wir uns mit den Hooks für die Module.

Hook: activateAccount

Der activateAccount Hook wurde bereits unter "Hooks: member" besprochen.

Hook: checkCredentials

Der checkCredentials Hook wurde bereits unter "Hooks: member" besprochen.

Hook: closeAccount

Der closeAccount Hook wurde bereits unter "Hooks: member" besprochen.

Hook: compileArticle

Der compileArticle Hook wurde bereits unter "Hooks: article" besprochen.

Hook: createNewUser

Der createNewUser Hook wurde bereits unter "Hooks: member" besprochen.

Hook: customizeSearch

Der customizeSearch Hook wird aufgerufen, wenn ein Forntend-Mitglied die Suche benutzt.

Registrierung

# /src/Ctocb/Example/Resources/config/services.yml
services:

  # Hooks
  Ctocb\Example\Classes\Contao\Hooks\ExampleHook:
    public: true
    tags:
      - { name: contao.hook, hook: customizeSearch, method: handleHook, priority: 1024 }

Klasse

<?php

namespace Ctocb\Example\Classes\Contao\Hooks;

use Contao\Module;

class ExampleHook {

    public function handleHook(array &$pageIds, string $keywords, string $queryType, bool $fuzzy, Module $module): void
    {
        // Change the $pageIds array here or do some other adjustments ...
    }
}

Parameter:

Parameter Typ Beschreibung
$pageIds array Ids der Seiten die durchsucht werden
$keywords string String mit den Suchworten
$queryType string Abfragetyp (and oder or)
$fuzzy bool Bei einer unscharfen Suche true sonst false
$module \Contao\Module Instanz des Moduls, dass die Suche ausgelöst hat

Rückgabewert:

Keiner, da $pageIds per Referenz übergeben wird.

Referenz im Contao Core: \Contao\ModuleSearch#L132-L140 und https://github.com/contao/core/issues/5223

Hook: findCalendarBoundaries

Der findCalendarBoundaries Hook wurde bereits unter "Hooks: calendar" besprochen.

Hook: generateBreadcrumb

Mit dem generateBreadcrumb Hook kann man die Brodkrumennavigation anpassen.

Registrierung

# /src/Ctocb/Example/Resources/config/services.yml
services:

  # Hooks
  Ctocb\Example\Classes\Contao\Hooks\ExampleHook:
    public: true
    tags:
      - { name: contao.hook, hook: generateBreadcrumb, method: handleHook, priority: 1024 }

Klasse

<?php

namespace Ctocb\Example\Classes\Contao\Hooks;

use Contao\Module;

class ExampleHook {

    public function handleHook(array $items, Module $module)
    {
        // Modify $items ...

        return $items;
    }
}

Parameter:

Parameter Typ Beschreibung
$items array Elemente der Navigation
$module \Contao\Module Instanz des Moduls, dass die Navigation aufbaut

Rückgabewert:

Typ Beschreibung
array Elemente der Navigation

Die einzelnen Einträge des Arrays müssen die folgende Struktur haben:

Parameter Typ Beschreibung
isRoot bool Muss true sein, wenn es sich um eine Startseite handelt, sonst false
isActive bool Muss true sein, wenn es sich um die aktive Seite handelt, sonst false
href string Url des Eintrags
title string Titleatribut des Links
link string Text des Links
data array Assoziative Array mit den Daten der Seite aus tl_page, auf die der Link verweist
class string CSS-Klasse für den Eintrag

Referenz im Contao Core: \Contao\ModuleBreadcrumb.php#L212-L220

Hook: getAllEvents

Der getAllEvents Hook wurde bereits unter "Hooks: calendar" besprochen.

Hook: getFrontendModule

Der getFrontendModule Hook wurde bereits unter "Hooks: controller" besprochen.

Hook: newsListCountItems

Wenn die News-Ergebnisse mittels newsListFetchItems-Hook manuell gefilter werden, muss zusätzlich der newsListCountItems Hook aufgerufen werden, um die richtige Anzahl gefundener Elemente anzuzeigen.

Registrierung

# /src/Ctocb/Example/Resources/config/services.yml
services:

  # Hooks
  Ctocb\Example\Classes\Contao\Hooks\ExampleHook:
    public: true
    tags:
      - { name: contao.hook, hook: newsListCountItems, method: handleHook, priority: 1024 }

Klasse

<?php

namespace Ctocb\Example\Classes\Contao\Hooks;

use Contao\Module;

class ExampleHook {

    public function handleHook(array $newsArchives, bool $featuredOnly, Module $module)
    {
        if (true) { // do here somtthing usefull!
            // Query the database and return the number of records
            return $numberOfRecords;
        }

        return false;
    }
}

Parameter:

Parameter Typ Beschreibung
$newsArchives array Ids der Archive die angezeigt werden sollen
$featuredOnly bool Bei true werden nur die Favoriten angezeigt
$module \Contao\Module Instanz des Moduls, dass den Aufruf ausgelöst hat

Rückgabewert:

Typ Beschreibung
int oder false Anzahl der gefundenen Beiträge, oder false

Referenz im Contao Core: \Contao\ModuleNewsList#L168-L183

Hook: newsListFetchItems

Mit dem newsListFetchItems Hook können die News-Beiträge manuell gefiltert oder sortiert werden.

Registrierung

# /src/Ctocb/Example/Resources/config/services.yml
services:

  # Hooks
  Ctocb\Example\Classes\Contao\Hooks\ExampleHook:
    public: true
    tags:
      - { name: contao.hook, hook: newsListFetchItems, method: handleHook, priority: 1024 }

Klasse

<?php

namespace Ctocb\Example\Classes\Contao\Hooks;

use Contao\Module;

class ExampleHook {

    public function handleHook(array $newsArchives, ?bool $featuredOnly, int $limit, int $offset, Module $module)
    {
        if (true) { // do here something usefull
            // Query the database and return the records
            return \Contao\NewsModel::findBy(/* ... */);
        }

        return false;
    }
}

Parameter:

Parameter Typ Beschreibung
$newsArchives array Ids der Archive die angezeigt werden
$featuredOnly bool Bei true werden nur die Favoriten angezeigt
$limit integer Das im Modul definierte Limit
$offset integer Der im Modul definierte Versatz
$module \Contao\Module Instanz des Moduls, dass den Aufruf ausgelöst hat

Rückgabewert:

Typ Beschreibung
\Contao\Model\Collection oder false oder null Gefundenen Beiträge, oder null wenn keine Beiträge gefunden wurden, oder false wenn der Hook keine Verarbeitung durchführt

Referenz im Contao Core: \Contao\ModuleNewsList#L200-L215

Hook: parseArticles

Der parseArticles Hook wird aufgerufen, wenn ein Artikel 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: parseArticles, method: handleHook, priority: 1024 }

Klasse

<?php

namespace Ctocb\Example\Classes\Contao\Hooks;

use Contao\FrontendTemplate;
use Contao\Module;

class ExampleHook {

    public function handleHook(FrontendTemplate $template, array $newsEntry, Module $module)
    {
        // Remove the default "by ..." from Contao
        $template->author = UserModel::findByPk($newsEntry['author'])->name;
    }
}

Parameter:

Parameter Typ Beschreibung
$template \Contao\FrontendTemplate Instanz des zu renderden Templates
$newsEntry array Daten der einzelnen News aus der Datenbank
$module \Contao\Module Instanz des Moduls, dass den Aufruf ausgelöst hat

Rückgabewert:

Keiner, da $template als Referenz übergeben wird.

Referenz im Contao Core: \Contao\ModuleNews#L217-L225

Hook: printArticleAsPdf

Der printArticleAsPdf Hook wurde bereits unter "Hooks: article" besprochen.

Hook: removeRecipient

Der removeRecipient Hook wird aufgerufen, wenn ein Newsletterempfänger gelöscht wird.

Registrierung

# /src/Ctocb/Example/Resources/config/services.yml
services:

  # Hooks
  Ctocb\Example\Classes\Contao\Hooks\ExampleHook:
    public: true
    tags:
      - { name: contao.hook, hook: removeRecipient, method: handleHook, priority: 1024 }

Klasse

<?php

namespace Ctocb\Example\Classes\Contao\Hooks;

class ExampleHook {

    public function handleHook(string $email, array $channels): void
    {
        // Do something ...
    }
}

Parameter:

Parameter Typ Beschreibung
$email string E-Mail-Adresse des zu löschenden Empfängers
$channels array Newsletterarchive, aus denen der Empfänger gelöscht wird

Rückgabewert:

keinen

Referenz im Contao Core: \Contao\ModuleUnsubscribe#L262-L270

Hook: setNewPassword

Der setNewPassword Hook wurde bereits unter "Hooks: backend" besprochen.

Hook: updatePersonalData

Der updatePersonalData Hook wurde bereits unter "Hooks: member" besprochen.