← Blog

Fluid Tag-Syntax automatisch zu Inline konvertieren

Fluid kennt zwei Schreibweisen für ViewHelper: Tag-Syntax und Inline. Das PhpStorm-Plugin TYPO3 Fluid Inline Converter wandelt Tag-Notation per Tastendruck in die kompaktere Inline-Form um, auch bei verschachtelten und verketteten ViewHelpern.


Fluid kennt zwei Schreibweisen für denselben ViewHelper. Die Tag-Syntax <f:format.bytes>...</f:format.bytes> ist gut lesbar, wird aber bei einfachen Ausgaben schnell unnötig sperrig. Die Inline-Syntax {value -> f:format.bytes()} macht aus drei Zeilen eine.

Der Nachteil besteht allerdings darin, dass eine manuelle Konvertierung mühsam und fehleranfällig ist, denn Syntaxfehler sind schwerer erkennbar.

Genau das übernimmt das PhpStorm-Plugin TYPO3 Fluid Inline Converter.

Tag-Syntax und Inline-Syntax

Beide Notationen erzeugen dasselbe Ergebnis. Inline ist kompakter, sobald der ViewHelper nur einen Wert formatiert und sonst kein verschachteltes Markup enthält:

Beispiele

Dasselbe Template einmal in Tag-Syntax und einmal nach der Konvertierung. Jede Zeile entspricht ihrer Gegenüberstellung in der anderen Datei:

<!-- vorher: Tag-Syntax -->
<html data-namespace-typo3-fluid="true">

<f:format.htmlentitiesDecode>{newsItem.title}</f:format.htmlentitiesDecode>

<f:format.bytes decimals="1">{data.item_size}</f:format.bytes>

<f:translate key="author" arguments="{0: newsItem.author}" />

<f:translate key="{f:if(condition: '{count} == 1', then: 'entry', else: 'entries')}" />

<f:be.infobox message="{f:translate(domain: 'indexed_search.messages', key: 'administration.noPageSelected')}" state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::INFO')}" />

<f:be.uri route="redirects" parameters="{demand: demand.parameters, page: 987654322}" />

<core:icon identifier="{severityIconMapping.{status.severity.value}}" size="default" />

</html>
<!-- nachher: Inline -->
<html data-namespace-typo3-fluid="true">

{newsItem.title -> f:format.htmlentitiesDecode()}

{data.item_size -> f:format.bytes(decimals: 1)}

{f:translate(arguments: {0:newsItem.author}, key: 'author')}

{f:translate(key: '{f:if(condition: \'{count} == 1\', then: \'entry\', else: \'entries\')}')}

{f:be.infobox(message: '{f:translate(domain:\'indexed_search.messages\', key:\'administration.noPageSelected\')}', state: '{f:constant(name: \'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::INFO\')}')}

{f:be.uri(route: 'redirects', parameters: {demand: demand.parameters, page: 987654322})}

{core:icon(identifier: '{severityIconMapping.{status.severity.value}}', size: 'default')}

</html>

Bedienung in PhpStorm

Die Konvertierung läuft über die Intention Actions von PhpStorm. Cursor in den ViewHelper setzen, Alt+Enter drücken und die passende Aktion wählen. Alternativ steht der Eintrag im Kontextmenü per Rechtsklick bereit.

Über Feedback und Reviews im JetBrains Marketplace freue ich mich.