PSR-14 Events

Use the FrontendEditDropdownModifyEvent to modify the edit menu to your needs. You can add, remove or modify buttons for specific content elements. See the example below:

Classes/EventListener/ModifyFrontendEditListener.php
<?php

declare(strict_types=1);

namespace Vendor\Package\EventListener;

use TYPO3\CMS\Backend\Routing\UriBuilder;
use TYPO3\CMS\Core\Imaging\IconFactory;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use Xima\XimaTypo3FrontendEdit\Enumerations\ButtonType;
use Xima\XimaTypo3FrontendEdit\Event\FrontendEditDropdownModifyEvent;
use Xima\XimaTypo3FrontendEdit\Template\Component\Button;

class ModifyFrontendEditListener
{
    public function __construct(protected readonly IconFactory $iconFactory, protected readonly UriBuilder $uriBuilder)
    {
    }

    public function __invoke(FrontendEditDropdownModifyEvent $event): void
    {
        $contentElement = $event->getContentElement();
        $menuButton = $event->getMenuButton();

        // Example 1
        // Append a custom button (after the existing edit_page button) for your plugin to e.g. edit the referenced entity
        if ($contentElement['CType'] === 'list' && $contentElement['list_type'] === 'custom_plugin_name') {
            $menuButton->appendAfterChild(new Button(
                'Edit entity',
                ButtonType::Link,
                $this->uriBuilder->buildUriFromRoute(
                    'record_edit',
                    [
                        'edit' => [
                            'custom_entity' => [
                                $contentElement['custom_entity_uid'] => 'edit',
                            ],
                        ],
                        'returnUrl' => $event->getReturnUrl(),
                    ],
                )->__toString(),
                $this->iconFactory->getIcon('content-idea', 'small')
            ),
            'edit_page',
            'edit_custom_entity'
            );
        }

        // Example 2
        // Remove existing buttons
        $menuButton->removeChild('div_action');

        $event->setMenuButton($menuButton);
    }
}
Copied!

Don't forget to register your event listener via PHP attributes (TYPO3 >= 13):

Classes/EventListener/ModifyFrontendEditListener.php
#[AsEventListener(
    identifier: 'ext-some-extension/modify-frontend-edit-listener',
)]
Copied!

or register the event listener in your Services.yaml:

Configuration/Services.yaml
services:
Vendor\Package\EventListener\ModifyFrontendEditListener:
    tags:
        - name: event.listener
            identifier: 'ext-some-extension/modify-frontend-edit-listener'
Copied!