Create Extbase Plugins

This guide demonstrates how to create Extbase plugins using Content Blocks.

Create a new Content Block

EXT:site_package/ContentBlocks/ContentElements/artists/config.yaml
name: vendor/artists-list
group: plugins
Copied!
EXT:site_package/ContentBlocks/ContentElements/artists/templates/frontend.html
<f:cObject typoscriptObjectPath="{data.mainType}.{data.recordType}.20" table="{data.mainType}" data="{data:data}"/>
Copied!

Add TypoScript

For extensionName and pluginName use the names as configured in the next step.

EXT:site_package/Configuration/TypoScript/setup.typoscript
tt_content.vendor_artistslist.20 = EXTBASEPLUGIN
tt_content.vendor_artistslist.20 {
    extensionName = MyExtension
    pluginName = MyPlugin
    # If your controller returns a HTML response, set the template path like this:
    view {
        templateRootPaths.0 = EXT:site_package/ContentBlocks/ContentElements/artists/templates
    }
}
Copied!

Register Controller Actions

EXT:site_package/ext_localconf.php
ExtensionUtility::registerControllerActions(
    'MyExtension',
    'MyPlugin',
    [
        ArtistController::class => ['list']
    ],
    [
        ArtistController::class => []
    ]
);
Copied!

Example Controller

This controller simply passes the data from your Content Block to the Fluid template.

EXT:site_package/Classes/Controller/ArtistController.php
<?php

declare(strict_types=1);

namespace Vendor\MyVendor\Controller;

use Psr\Http\Message\ResponseInterface;
use TYPO3\CMS\Extbase\Mvc\Controller\ActionController;

class ArtistController extends ActionController
{
    public function listAction(): ResponseInterface
    {
        /** @var ContentObjectRenderer $contentObject */
        $contentObject = $this->request->getAttribute('currentContentObject');
        $dataFromTypoScript = $contentObject->data;

        $this->view->assign('data', $dataFromTypoScript['data']);

        return $this->htmlResponse();
    }
}
Copied!

See also: