TYPO3 PageTitleProvider für eigene Extensions

Erstellen von eigenen PageTitleProvidern für TYPO3. Anwendungsfälle sind Erweiterungen, die eine einzelne Seite für die Darstellung verschiedener Inhalte verwenden wie z.b die Einzelansichten von News oder Blog-Posts.

Vorgehen:

Eine Klasse MyPageTitleProvider.php in myextension/Classes/PageTitle erstellen:

<?php
namespace Rms\Blog;
use TYPO3\CMS\Core\PageTitle\AbstractPageTitleProvider;
class MyPageTitleProvider extends AbstractPageTitleProvider
{
    /**
     * @param string $title
     */
    public function setTitle(string $title)
    {
        $this->title = $title;
    }
}

Danach wird der PageTitleProvider und bei mehrern Providern ggf. die Priorität in TypoScript konfiguriert

config.pageTitleProviders {    
    custom {
        provider = Rms\Blog\MyPageTitleProvider
        before = pages
        after = altPageTitle
    }
}

Nun kann der neue PageTitleProvider z.B. innerhalb einer show() Funktion verwendet werden, um den Default Page-Title zu überschreiben:

<?php
class PostController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController
{
    /**
     * action show
     *
     * @param \Rms\Blog\Domain\Model\Post $post
     * @return \Psr\Http\Message\ResponseInterface
     */
    public function showAction(\Rms\Blog\Domain\Model\Post $post): \Psr\Http\Message\ResponseInterface
    {
        $titleProvider = GeneralUtility::makeInstance(\Rms\Blog\MyPageTitleProvider::class);
        $titleProvider->setTitle($post->getTitle());

        $this->view->assign('post', $post);
        return $this->htmlResponse();
    }
}
prev Update Debian 11 auf Debian 12 (bookworm)
next Übersetzen von XMLs mit DeepL