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: )