Signals & Hooks

Einige bereitgestellte Hooks und Signals können zur Anpassung der Erweiterung genutzt werden. Nach Bedarf können gerne weitere Hooks und Signals bereitgestellt werden. Setzen Sie sich diesbezüglich gerne mit uns in Verbindung: Wird Unterstützung benötigt?.

Signals

Alle bereitgestellten Signals können in der Datei Classes/Events.php der Erweiterung bzga_beratungsstellensuche eingesehen werden und sind ausreichend kommentiert.

Beispiel

Als Beispiel möchten wir für die Formularansicht eine weitere Variable der View hinzufügen.

<?php
// Dies ist der Code-Abschnitt in der Datei Classes/Controller/EntryController.php
$assignedViewValues = array(
        'demand' => $demand,
        'kilometers' => $kilometers,
        'categories' => $categories,
        'countryZonesGermany' => $countryZonesGermany
);
$this->emitActionSignal(Events::FORM_ACTION_SIGNAL, $assignedViewValues)

Um dieses Signal zu nutzen, erstellen Sie einen Slot in Ihrer eigenen Erweiterung. Dafür wird ein Eintrag in Ihrer ext_localconf.php benötigt:

<?php
/** @var \TYPO3\CMS\Extbase\SignalSlot\Dispatcher $signalSlotDispatcher */
$signalSlotDispatcher = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Extbase\SignalSlot\Dispatcher::class);

// Extend form view
$signalSlotDispatcher->connect(
        \Bzga\BzgaBeratungsstellensuche\Controller\EntryController::class,
        \Bzga\BzgaBeratungsstellensuche\Events::FORM_ACTION_SIGNAL,
        \YOUR_VENDOR\YOUR_EXTKEY\Slots\EntryController::class,
        'formAction'
);

Ihr Slot könnte dann wie folgt aussehen:

<?php

namespace YOUR_VENDOR\YOUR_EXTKEY\Slots;
class EntryController
{
        public function listAction($variables)
        {
                $variables = array_merge($variables, array('myVariable' => 'myValue'));
                return array(
                'extendedVariables' => $variables,
                );
        }
}

Hinweis

Schauen Sie sich bitte die Datei Classes/Events.php in Ruhe an. Sie werden darüber schnell erfahren, welche Teile in der Erweiterung flexibel erweitert werden können.

Hooks

Es gibt aktuell verschiedenen Stellen an denen statt Signals Hooks zum Einsatz kommen. Für die Erweiterung der Flexforms haben wir bereits zwei Hooks im Einsatz gesehen. Siehe hierzu: Flexforms erweitern.

Für das Frontend gibt es weitere interessante Hooks.

Domain/Repository/EntryRepository.php findDemanded

Dieser Hook ermöglicht die Abfrage zur Filterung der Einträge um seine eigene Logik zu erweitern.

Beispiel

Dieses Beispiel ergänzt die Abfrage um eine weitere Bedingung, so dass nur Einträge angezeigt werden, die das Keyword „unabhängig“ enthalten.

Als Erstes muss der Hook in der Datei ext_localconf.php erstellt werden:

<?php

$GLOBALS['TYPO3_CONF_VARS']['EXT']['bzga_beratungsstellensuche']['Domain/Repository/EntryRepository.php']['findDemanded'][$_EXTKEY]
        = 'YOUR_VENDOR\\YOUR_EXTKEY\\Hooks\\Repository->modify';

Jetzt erstellen Sie die Datei Classes/Hooks/Repository.php:

<?php

namespace YOUR_VENDOR\YOUR_EXTKEY\Hooks;

use Bzga\BzgaBeratungsstellensuche\Domain\Model\Dto\Demand;
use TYPO3\CMS\Extbase\Persistence\QueryInterface;

class Repository
{
        public function modify(array $params)
        {
                $query = $params['query'];
                /* @var $query QueryInterface */
                $constraints = &$params['constraints'];
                /* @var $constraints array */
                $demand = $params['demand'];
                /* @var $demand Demand */
                $constraints[] = $query->like('keywords', '%unabhängig%');
        }
}

Hinweis

Um die bereitgestellten Hooks ausfindig zu machen, können Sie bspw. einmal folgenden Befehl ausführen: grep -n -C 5 „[‚EXT‘][‚bzga_beratungsstellensuche‘]“ -r bzga_beratungsstellensuche/Classes/

Hinweis

Bitte passen Sie den Vendor-Präfix und den Extension-Key an ihre Gegebenheiten an.