[TYPO3-german] Seitentitel per titleTagFunction und Signal Dispatcher

Mikel lists at con-version.com
Tue Oct 24 11:30:00 CEST 2017


Hallo zusammen,

ein etwas anderer Ansatz, den meta title einer Seite zu rendern, der auch Datensätze aus Extensions berücksichtigen kann:

config.titleTagFunction = Vendor\Extension\Renderer\PageTitleRenderer->renderPageTitle

Die Klasse PageTitleRenderer sendet ein Signal, welches in den jeweiligen Controllern connected werden kann, um den Seitentitel zu setzen:

public function renderPageTitle() {

		/** @var \TYPO3\CMS\Extbase\SignalSlot\Dispatcher */
		$signalSlotDispatcher = GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\SignalSlot\\Dispatcher');

		$signalSlotDispatcher->dispatch(
			__CLASS__,
			'beforeRenderPageTitle',
			array(&$this)
		);

		if(!$this->pageTitle) {
			$this->pageTitle = $GLOBALS['TSFE']->page['title'];
		}

		return $this->pageTitle;

	}

In einem meiner Controller wird dieses Signal connected und der Seitentitel gesetzt:

/**
     * action show
     *
     * @param \Vendor\Extension\Domain\Model\Project $project
     * @return void
     */
    public function showAction(\Conversion\ConversionWebsite\Domain\Model\Project $project)
    {
    	$this->currentProject = $project;
	    /** @var \TYPO3\CMS\Extbase\SignalSlot\Dispatcher */
	    $signalSlotDispatcher = GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\SignalSlot\\Dispatcher');
	    $signalSlotDispatcher->connect(
		    ‚Vendor\\Extension\\Renderer\\PageTitleRenderer',
			'beforeRenderPageTitle',
			$this,
			'setPageTitle'
	    );

        $this->view->assign('project', $project);
    }


public function setPageTitle(\Vendor\Extension\Renderer\PageTitleRenderer $signal) {
    	$pageTitle = $this->currentProject->getTitle();
    	if ($this->currentProject->getMetaTitle()) {
    		$pageTitle = $this->currentProject->getMetaTitle();
	    }
    	$signal->setPageTitle($pageTitle);
    }


Etwas unschön ist, dass das $project erst als globale Variable definiert werden muss ($this->currentProject), um diese in setPageTitle verfügbar zu haben. Kann man dies besser machen? Akzeptiert der Dispatcher an dieser Stelle auch Parameter?

Ich weiß, dass dies alles per TypoScript gelöst werden kann. Ich finde es allerdings etwas unschön, wenn man aus Extensions heraus überschreiben möchte und ggf. auch Conditions mit ins Spiel bringt. Die Logik in PHP abzubilden, ist mir da etwas lieber. 
Zudem wollte ich etwas mit dem Dispatcher rumspielen…

Mikel


More information about the TYPO3-german mailing list