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.