EXT: sf_event_mgt erweitern: Registrierung direkt auf Detailseite
In diesem Beispiel ist der Vendor ‘Machwert’ und die Extension ‘theme’.
1. In die Datei ext_localconf.php der eigenen Extension die zu vererbende Klasse definieren:
EXT:theme/ext_localconf.php
<?php declare(strict_types=1); use Machwert\Theme\Xclass\NewEventController as NewEventControllerXclass; use DERHANSEN\SfEventMgt\Controller\EventController; defined('TYPO3') or die(); $GLOBALS['TYPO3_CONF_VARS']['SYS']['Objects'][EventController::class] = [ 'className' => NewEventControllerXclass::class ];
2. NewEventController.php anlegen und dort die $this→settings['singleEvent'] über den URL-Event-Parameter festlegen. Dann die jeweilige Elternfunktion der Originalklasse aufrufen.
EXT:theme/Classes/XClass/NewEventController.php
<?php declare(strict_types=1); /* * This file is part of the Extension "theme" and extends "sf_event_mgt" for TYPO3 CMS. * * For the full copyright and license information, please read the * LICENSE.txt file that was distributed with this source code. */ namespace Machwert\Theme\Xclass; use DERHANSEN\SfEventMgt\Domain\Model\Event; use DERHANSEN\SfEventMgt\Domain\Model\Registration; use Psr\Http\Message\ResponseInterface; use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Extbase\Annotation as Extbase; class NewEventController extends \DERHANSEN\SfEventMgt\Controller\EventController { public function registrationAction(?Event $event = null): ResponseInterface { $getVars = GeneralUtility::_GET('tx_sfeventmgt_pieventdetail'); if(!isset($getVars['event'])) { $getVars = GeneralUtility::_GET('tx_sfeventmgt_pieventregistration'); } if(isset($getVars['event'])) { $eventId = (int)$getVars['event']; if ($eventId > 0) { $this->settings['singleEvent'] = $eventId; } } return parent::registrationAction($event); } /** * Shows the result of the saveRegistrationAction */ public function saveRegistrationResultAction(int $result, int $eventuid, string $hmac): ResponseInterface { $getVars = \TYPO3\CMS\Core\Utility\GeneralUtility::_GET('tx_sfeventmgt_pieventregistration'); if(isset($getVars['event'])) { $eventId = (int) $getVars['event']; if($eventId > 0) { $this->settings['singleEvent'] = $eventId; } } return parent::saveRegistrationResultAction($result, $eventuid, $hmac); } public function initializeSaveRegistrationAction(): void { $getVars = GeneralUtility::_GET('tx_sfeventmgt_pieventregistration'); if (isset($getVars['event'])) { $eventId = (int)$getVars['event']; if ($eventId > 0) { $this->settings['singleEvent'] = $eventId; $this->settings['disableOverrideDemand'] = 0; } } parent::initializeSaveRegistrationAction(); } /** * Saves the registration * * @Extbase\Validate("DERHANSEN\SfEventMgt\Validation\Validator\RegistrationFieldValidator", param="registration") * @Extbase\Validate("DERHANSEN\SfEventMgt\Validation\Validator\RegistrationValidator", param="registration") */ public function saveRegistrationAction(Registration $registration, Event $event): ResponseInterface { $getVars = GeneralUtility::_GET('tx_sfeventmgt_pieventregistration'); if (isset($getVars['event'])) { $eventId = (int)$getVars['event']; if ($eventId > 0) { $this->settings['singleEvent'] = $eventId; } } return parent::saveRegistrationAction($registration, $event); } }
3. Bei Composer Installation in der composer.json darauf achten, dass die Extension Klassen geladen werden.
EXT:theme/composer.json
"autoload": { "psr-4": { "Machwert\\Theme\\": "Classes" } },
4. Extension per Composer deinstallieren und danach wieder installieren, damit die autoload Klassen registriert werden. Folgende Shell-Befehle ausführen:
composer remove Machwert/theme composer req Machwert/theme
Erstellt am: (aktualisiert am: )