{"id":78,"date":"2026-10-22T09:00:00","date_gmt":"2026-10-22T07:00:00","guid":{"rendered":"https:\/\/hoja.in\/blog\/fluid-5-in-typo3-v14-fixing-templates-after-the-upgrade\/"},"modified":"2026-10-16T14:00:12","modified_gmt":"2026-10-16T12:00:12","slug":"fluid-5-in-typo3-v14-fixing-templates-after-the-upgrade","status":"publish","type":"post","link":"https:\/\/hoja.in\/blog\/fluid-5-in-typo3-v14-fixing-templates-after-the-upgrade\/","title":{"rendered":"Fluid 5 in TYPO3 v14: fixing templates after the upgrade"},"content":{"rendered":"<p>TYPO3 v14 comes with Fluid 5. On my v14 project the installed package is <code>typo3fluid\/fluid<\/code> 5.3.2. Most templates render exactly like before, and that is the dangerous part: you click through a few pages, everything looks fine, and then one partial throws an exception on a page nobody tested. Fluid 5 removed things that were deprecated for a long time and made a few rules stricter.<\/p>\n<p>For my own site hoja.in I rebuilt the sitepackage from scratch with PAGEVIEW, so the templates were already written for v14. But on upgrades of older sites, the same three topics come back every time. This post is my checklist for them, with the changelog entry behind each one.<\/p>\n<h2>What changed in Fluid 5<\/h2>\n<p>The umbrella entry is <code>Breaking-108148-Fluid50.rst<\/code> in the v14.0 changelog. It says Fluid 5 removes the deprecations from Fluid 2.x and 4.x. For integrators, three more entries with the same issue number matter most.<\/p>\n<h3>1. Stricter ViewHelper arguments<\/h3>\n<p>Fluid 5 validates ViewHelper arguments against their declared types (<code>Breaking-108148-StrictTypesInFluidViewHelpers.rst<\/code>). Simple conversions still work, so an integer passed to a <code>string<\/code> argument is fine. But an array passed where a string is expected is now rejected. Honestly, most of these were bugs before; Fluid just stopped looking away.<\/p>\n<p>A typical case from older templates: somebody passes an array to an attribute that wants a string.<\/p>\n<pre><code class=\"language-html\">&lt;!-- Before: \"classes\" is an array assigned by the controller --&gt;\n&lt;f:link.page pageUid=\"{page.uid}\" class=\"{classes}\"&gt;{page.title}&lt;\/f:link.page&gt;\n\n&lt;!-- After: build the string where the data is prepared and keep the template simple --&gt;\n&lt;f:link.page pageUid=\"{page.uid}\" class=\"{linkClass}\"&gt;{page.title}&lt;\/f:link.page&gt;<\/code><\/pre>\n<p>The fix belongs in PHP or in a DataProcessor, not in clever template code. When I am not sure which type an argument expects, I look it up in the ViewHelper reference for the exact version instead of guessing.<\/p>\n<p>The same entry has a second change that does not throw but changes HTML. Tag-based ViewHelpers like <code>f:form.textfield<\/code>, <code>f:link.*<\/code> or <code>f:image<\/code> used to render <code>null<\/code> as an empty attribute. Fluid 5 leaves the attribute out. So <code>placeholder=\"{maybeNull}\"<\/code> used to give <code>placeholder=\"\"<\/code> and now gives no placeholder at all. If your CSS or JavaScript selects on an empty attribute, look there.<\/p>\n<p>For custom ViewHelpers, the interface now wants return types: <code>initializeArguments(): void<\/code> and a declared return type on <code>render()<\/code> (<code>mixed<\/code> is allowed). The entry says this is backwards compatible, so you can add the types while still on v13.<\/p>\n<h3>2. Variable names starting with an underscore<\/h3>\n<p>Names like <code>_temp<\/code> or <code>_item<\/code> are reserved for Fluid now (<code>Breaking-108148-FluidUnderscoreVariablePrefix.rst<\/code>). This hits <code>f:variable<\/code>, the <code>as<\/code> of <code>f:for<\/code>, keys in <code>f:render arguments<\/code>, and also <code>$view-&gt;assign()<\/code> in PHP. <code>{_all}<\/code> still works, and so do keys inside arrays like <code>{data._key}<\/code>.<\/p>\n<pre><code class=\"language-html\">&lt;!-- Before --&gt;\n&lt;f:for each=\"{items}\" as=\"_item\"&gt;\n    &lt;f:render partial=\"Teaser\" arguments=\"{_data: _item}\" \/&gt;\n&lt;\/f:for&gt;\n\n&lt;!-- After --&gt;\n&lt;f:for each=\"{items}\" as=\"item\"&gt;\n    &lt;f:render partial=\"Teaser\" arguments=\"{teaser: item}\" \/&gt;\n&lt;\/f:for&gt;<\/code><\/pre>\n<p>Remember to rename the variable inside the partial too. I forgot that once and got an empty teaser instead of an exception, which is worse.<\/p>\n<h3>3. CDATA is not a comment any more<\/h3>\n<p>Old trick: wrap template code in <code>&lt;![CDATA[ ]]&gt;<\/code> and Fluid removed it completely, so people used it to comment out blocks. Fluid 5 keeps CDATA sections and gives them a new meaning (<code>Breaking-108148-CDATASectionsNoLongerRemoved.rst<\/code>). Inside CDATA, single braces are ignored and you use three braces to reach Fluid. That is nice for inline CSS or JavaScript, but your &#8220;commented out&#8221; code suddenly appears in the HTML.<\/p>\n<pre><code class=\"language-html\">&lt;!-- Before: hidden by Fluid 4, printed by Fluid 5 --&gt;\n&lt;![CDATA[\n    &lt;f:render partial=\"OldSlider\" arguments=\"{slides: slides}\" \/&gt;\n]]&gt;\n\n&lt;!-- After --&gt;\n&lt;f:comment&gt;\n    &lt;f:render partial=\"OldSlider\" arguments=\"{slides: slides}\" \/&gt;\n&lt;\/f:comment&gt;\n\n&lt;!-- And if you really need a value in inline CSS --&gt;\n&lt;style&gt;\n&lt;![CDATA[\n    .hero { background-color: {{{heroColor}}}; }\n]]&gt;\n&lt;\/style&gt;<\/code><\/pre>\n<h2>Finding affected templates before the upgrade<\/h2>\n<p>This part is the reason I like the v13 to v14 path. Both the underscore variables and the CDATA comments write to the deprecation log since TYPO3 13.4.21, according to their changelog entries. So on the v13 site, before you upgrade, switch the deprecation log on. It is off by default; in <code>config\/system\/additional.php<\/code> of your local or staging setup:<\/p>\n<pre><code class=\"language-php\">$GLOBALS['TYPO3_CONF_VARS']['LOG']['TYPO3']['CMS']['deprecations']['writerConfiguration'][PsrLogLogLevel::NOTICE][TYPO3CMSCoreLogWriterFileWriter::class]['disabled'] = false;<\/code><\/pre>\n<p>Then crawl the site (a sitemap and a small loop with curl is enough) and read <code>var\/log\/typo3_deprecations_*.log<\/code>. Every template that renders on a crawled page and uses the old constructs shows up there. Templates on pages you did not crawl do not, so this is a net, not a proof.<\/p>\n<p>On v14 itself there is a command: <code>vendor\/bin\/typo3 fluid:analyse<\/code> (the long name is <code>fluid:analyze<\/code>). It reports syntax errors and deprecations, but it only scans files with the new <code>*.fluid.html<\/code> extension. Most project templates are still plain <code>*.html<\/code>. The command also has a <code>--stdin<\/code> option, so I feed the old files to it one by one:<\/p>\n<pre><code class=\"language-bash\">find packages\/sitepackage\/Resources\/Private -name '*.html' ! -name '*.fluid.html' |\nwhile read -r file; do\n  echo \"== $file\"\n  ddev exec vendor\/bin\/typo3 fluid:analyse --stdin &lt; \"$file\"\ndone<\/code><\/pre>\n<p>On a test template with <code>&lt;f:variable name=\"_temp\" \u2026 \/&gt;{_temp}<\/code> it printed: <code>Variable identifiers cannot start with a \"_\": _temp<\/code>, with the line and character. That is a parse-level check, so it catches underscore variables everywhere in the file, even on pages you never crawl. What it cannot catch are the runtime type problems from point 1, because those depend on the real values. The changelog says so openly. For those, you still need to render the pages.<\/p>\n<h2>The new file extension is optional<\/h2>\n<p>Fluid 5 also introduced <code>*.fluid.html<\/code> (<code>Feature-108166<\/code>). It is not required: TYPO3 looks for <code>Default.fluid.html<\/code> first and falls back to <code>Default.html<\/code>. Do not rename templates in an extension that still supports v13, because older Fluid does not know the new name. For a v14-only sitepackage, renaming lets <code>fluid:analyse<\/code> check the files without the stdin trick.<\/p>\n<h2>My order of work<\/h2>\n<ol>\n<li>On v13.4 (latest patch level): enable the deprecation log, crawl, fix underscore variables and CDATA comments.<\/li>\n<li>Add return types to custom ViewHelpers while still on v13.<\/li>\n<li>Upgrade to v14, run <code>fluid:analyse<\/code> (with <code>--stdin<\/code> for plain <code>.html<\/code>).<\/li>\n<li>Render every page type and compare against a baseline from before the upgrade, looking for exceptions and missing attributes.<\/li>\n<\/ol>\n<p>It is not glamorous work, but it saves the &#8220;only the job list page is broken&#8221; phone call. Feedbacks are the champion&#8217;s breakfast, so tell me what Fluid 5 broke for you.<\/p>\n<h2>Further reading<\/h2>\n<ul>\n<li><a href=\"https:\/\/docs.typo3.org\/permalink\/changelog:breaking-108148-1763288349\">Breaking: #108148 \u2013 Strict types in Fluid ViewHelpers<\/a><\/li>\n<li><a href=\"https:\/\/docs.typo3.org\/permalink\/fluid:changelog-5-x\">Fluid changelog 5.x<\/a><\/li>\n<li><a href=\"https:\/\/docs.typo3.org\/other\/typo3\/view-helper-reference\/main\/en-us\/\">TYPO3 ViewHelper reference<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>TYPO3 v14 ships Fluid 5. Stricter ViewHelper arguments, reserved underscore variables and new CDATA handling break templates that worked in v13. How to find and fix them.<\/p>\n","protected":false},"author":1,"featured_media":79,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17],"tags":[13,33,24,25],"class_list":["post-78","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-typo3","tag-fluid","tag-typo3-v13","tag-typo3-v14","tag-upgrades"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Fluid 5 in TYPO3 v14: fixing templates after upgrading<\/title>\n<meta name=\"description\" content=\"Fluid 5 in TYPO3 v14 changes argument validation, underscore variables and CDATA. Find affected templates with the deprecation log and fluid:analyse.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/hoja.in\/blog\/fluid-5-in-typo3-v14-fixing-templates-after-the-upgrade\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Fluid 5 in TYPO3 v14: fixing templates after upgrading\" \/>\n<meta property=\"og:description\" content=\"Fluid 5 in TYPO3 v14 changes argument validation, underscore variables and CDATA. Find affected templates with the deprecation log and fluid:analyse.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/hoja.in\/blog\/fluid-5-in-typo3-v14-fixing-templates-after-the-upgrade\/\" \/>\n<meta property=\"og:site_name\" content=\"Hoja Mustaffa Abdul Latheef \u2013 Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-22T07:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/hoja.in\/blog\/wp-content\/uploads\/2026\/10\/fluid-5-in-typo3-v14-fixing-templates-after-the-upgrade.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Hoja Mustaffa Abdul Latheef\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@hojaonline\" \/>\n<meta name=\"twitter:site\" content=\"@hojaonline\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Hoja Mustaffa Abdul Latheef\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/hoja.in\\\/blog\\\/fluid-5-in-typo3-v14-fixing-templates-after-the-upgrade\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/hoja.in\\\/blog\\\/fluid-5-in-typo3-v14-fixing-templates-after-the-upgrade\\\/\"},\"author\":{\"name\":\"Hoja Mustaffa Abdul Latheef\",\"@id\":\"https:\\\/\\\/hoja.in\\\/blog\\\/#\\\/schema\\\/person\\\/e6fbd54c2061674d8ea3e7861d858c7b\"},\"headline\":\"Fluid 5 in TYPO3 v14: fixing templates after the upgrade\",\"datePublished\":\"2026-10-22T07:00:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/hoja.in\\\/blog\\\/fluid-5-in-typo3-v14-fixing-templates-after-the-upgrade\\\/\"},\"wordCount\":855,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/hoja.in\\\/blog\\\/#\\\/schema\\\/person\\\/e6fbd54c2061674d8ea3e7861d858c7b\"},\"image\":{\"@id\":\"https:\\\/\\\/hoja.in\\\/blog\\\/fluid-5-in-typo3-v14-fixing-templates-after-the-upgrade\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/hoja.in\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/fluid-5-in-typo3-v14-fixing-templates-after-the-upgrade.jpg\",\"keywords\":[\"fluid\",\"TYPO3 v13\",\"TYPO3 v14\",\"Upgrades\"],\"articleSection\":[\"TYPO3\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/hoja.in\\\/blog\\\/fluid-5-in-typo3-v14-fixing-templates-after-the-upgrade\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/hoja.in\\\/blog\\\/fluid-5-in-typo3-v14-fixing-templates-after-the-upgrade\\\/\",\"url\":\"https:\\\/\\\/hoja.in\\\/blog\\\/fluid-5-in-typo3-v14-fixing-templates-after-the-upgrade\\\/\",\"name\":\"Fluid 5 in TYPO3 v14: fixing templates after upgrading\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/hoja.in\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/hoja.in\\\/blog\\\/fluid-5-in-typo3-v14-fixing-templates-after-the-upgrade\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/hoja.in\\\/blog\\\/fluid-5-in-typo3-v14-fixing-templates-after-the-upgrade\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/hoja.in\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/fluid-5-in-typo3-v14-fixing-templates-after-the-upgrade.jpg\",\"datePublished\":\"2026-10-22T07:00:00+00:00\",\"description\":\"Fluid 5 in TYPO3 v14 changes argument validation, underscore variables and CDATA. Find affected templates with the deprecation log and fluid:analyse.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/hoja.in\\\/blog\\\/fluid-5-in-typo3-v14-fixing-templates-after-the-upgrade\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/hoja.in\\\/blog\\\/fluid-5-in-typo3-v14-fixing-templates-after-the-upgrade\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/hoja.in\\\/blog\\\/fluid-5-in-typo3-v14-fixing-templates-after-the-upgrade\\\/#primaryimage\",\"url\":\"https:\\\/\\\/hoja.in\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/fluid-5-in-typo3-v14-fixing-templates-after-the-upgrade.jpg\",\"contentUrl\":\"https:\\\/\\\/hoja.in\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/fluid-5-in-typo3-v14-fixing-templates-after-the-upgrade.jpg\",\"width\":1200,\"height\":630,\"caption\":\"Fluid 5 template fixes\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/hoja.in\\\/blog\\\/fluid-5-in-typo3-v14-fixing-templates-after-the-upgrade\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/hoja.in\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Fluid 5 in TYPO3 v14: fixing templates after the upgrade\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/hoja.in\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/hoja.in\\\/blog\\\/\",\"name\":\"Hoja Mustaffa Abdul Latheef \u2013 Blog\",\"description\":\"Notes from daily work with TYPO3, PHP and AI-assisted engineering\",\"publisher\":{\"@id\":\"https:\\\/\\\/hoja.in\\\/blog\\\/#\\\/schema\\\/person\\\/e6fbd54c2061674d8ea3e7861d858c7b\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/hoja.in\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/hoja.in\\\/blog\\\/#\\\/schema\\\/person\\\/e6fbd54c2061674d8ea3e7861d858c7b\",\"name\":\"Hoja Mustaffa Abdul Latheef\",\"logo\":{\"@id\":\"https:\\\/\\\/hoja.in\\\/blog\\\/#\\\/schema\\\/person\\\/image\\\/\"},\"description\":\"Senior TYPO3 Developer at jweiland.net, TYPO3 CMS Certified Developer. I write about TYPO3 upgrades, extension development, PHP and AI-assisted engineering with Claude Code.\",\"sameAs\":[\"https:\\\/\\\/hoja.in\\\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Fluid 5 in TYPO3 v14: fixing templates after upgrading","description":"Fluid 5 in TYPO3 v14 changes argument validation, underscore variables and CDATA. Find affected templates with the deprecation log and fluid:analyse.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/hoja.in\/blog\/fluid-5-in-typo3-v14-fixing-templates-after-the-upgrade\/","og_locale":"en_US","og_type":"article","og_title":"Fluid 5 in TYPO3 v14: fixing templates after upgrading","og_description":"Fluid 5 in TYPO3 v14 changes argument validation, underscore variables and CDATA. Find affected templates with the deprecation log and fluid:analyse.","og_url":"https:\/\/hoja.in\/blog\/fluid-5-in-typo3-v14-fixing-templates-after-the-upgrade\/","og_site_name":"Hoja Mustaffa Abdul Latheef \u2013 Blog","article_published_time":"2026-10-22T07:00:00+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/hoja.in\/blog\/wp-content\/uploads\/2026\/10\/fluid-5-in-typo3-v14-fixing-templates-after-the-upgrade.jpg","type":"image\/jpeg"}],"author":"Hoja Mustaffa Abdul Latheef","twitter_card":"summary_large_image","twitter_creator":"@hojaonline","twitter_site":"@hojaonline","twitter_misc":{"Written by":"Hoja Mustaffa Abdul Latheef","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/hoja.in\/blog\/fluid-5-in-typo3-v14-fixing-templates-after-the-upgrade\/#article","isPartOf":{"@id":"https:\/\/hoja.in\/blog\/fluid-5-in-typo3-v14-fixing-templates-after-the-upgrade\/"},"author":{"name":"Hoja Mustaffa Abdul Latheef","@id":"https:\/\/hoja.in\/blog\/#\/schema\/person\/e6fbd54c2061674d8ea3e7861d858c7b"},"headline":"Fluid 5 in TYPO3 v14: fixing templates after the upgrade","datePublished":"2026-10-22T07:00:00+00:00","mainEntityOfPage":{"@id":"https:\/\/hoja.in\/blog\/fluid-5-in-typo3-v14-fixing-templates-after-the-upgrade\/"},"wordCount":855,"commentCount":0,"publisher":{"@id":"https:\/\/hoja.in\/blog\/#\/schema\/person\/e6fbd54c2061674d8ea3e7861d858c7b"},"image":{"@id":"https:\/\/hoja.in\/blog\/fluid-5-in-typo3-v14-fixing-templates-after-the-upgrade\/#primaryimage"},"thumbnailUrl":"https:\/\/hoja.in\/blog\/wp-content\/uploads\/2026\/10\/fluid-5-in-typo3-v14-fixing-templates-after-the-upgrade.jpg","keywords":["fluid","TYPO3 v13","TYPO3 v14","Upgrades"],"articleSection":["TYPO3"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/hoja.in\/blog\/fluid-5-in-typo3-v14-fixing-templates-after-the-upgrade\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/hoja.in\/blog\/fluid-5-in-typo3-v14-fixing-templates-after-the-upgrade\/","url":"https:\/\/hoja.in\/blog\/fluid-5-in-typo3-v14-fixing-templates-after-the-upgrade\/","name":"Fluid 5 in TYPO3 v14: fixing templates after upgrading","isPartOf":{"@id":"https:\/\/hoja.in\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/hoja.in\/blog\/fluid-5-in-typo3-v14-fixing-templates-after-the-upgrade\/#primaryimage"},"image":{"@id":"https:\/\/hoja.in\/blog\/fluid-5-in-typo3-v14-fixing-templates-after-the-upgrade\/#primaryimage"},"thumbnailUrl":"https:\/\/hoja.in\/blog\/wp-content\/uploads\/2026\/10\/fluid-5-in-typo3-v14-fixing-templates-after-the-upgrade.jpg","datePublished":"2026-10-22T07:00:00+00:00","description":"Fluid 5 in TYPO3 v14 changes argument validation, underscore variables and CDATA. Find affected templates with the deprecation log and fluid:analyse.","breadcrumb":{"@id":"https:\/\/hoja.in\/blog\/fluid-5-in-typo3-v14-fixing-templates-after-the-upgrade\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/hoja.in\/blog\/fluid-5-in-typo3-v14-fixing-templates-after-the-upgrade\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/hoja.in\/blog\/fluid-5-in-typo3-v14-fixing-templates-after-the-upgrade\/#primaryimage","url":"https:\/\/hoja.in\/blog\/wp-content\/uploads\/2026\/10\/fluid-5-in-typo3-v14-fixing-templates-after-the-upgrade.jpg","contentUrl":"https:\/\/hoja.in\/blog\/wp-content\/uploads\/2026\/10\/fluid-5-in-typo3-v14-fixing-templates-after-the-upgrade.jpg","width":1200,"height":630,"caption":"Fluid 5 template fixes"},{"@type":"BreadcrumbList","@id":"https:\/\/hoja.in\/blog\/fluid-5-in-typo3-v14-fixing-templates-after-the-upgrade\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/hoja.in\/blog\/"},{"@type":"ListItem","position":2,"name":"Fluid 5 in TYPO3 v14: fixing templates after the upgrade"}]},{"@type":"WebSite","@id":"https:\/\/hoja.in\/blog\/#website","url":"https:\/\/hoja.in\/blog\/","name":"Hoja Mustaffa Abdul Latheef \u2013 Blog","description":"Notes from daily work with TYPO3, PHP and AI-assisted engineering","publisher":{"@id":"https:\/\/hoja.in\/blog\/#\/schema\/person\/e6fbd54c2061674d8ea3e7861d858c7b"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/hoja.in\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/hoja.in\/blog\/#\/schema\/person\/e6fbd54c2061674d8ea3e7861d858c7b","name":"Hoja Mustaffa Abdul Latheef","logo":{"@id":"https:\/\/hoja.in\/blog\/#\/schema\/person\/image\/"},"description":"Senior TYPO3 Developer at jweiland.net, TYPO3 CMS Certified Developer. I write about TYPO3 upgrades, extension development, PHP and AI-assisted engineering with Claude Code.","sameAs":["https:\/\/hoja.in\/"]}]}},"_links":{"self":[{"href":"https:\/\/hoja.in\/blog\/wp-json\/wp\/v2\/posts\/78","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hoja.in\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hoja.in\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hoja.in\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hoja.in\/blog\/wp-json\/wp\/v2\/comments?post=78"}],"version-history":[{"count":1,"href":"https:\/\/hoja.in\/blog\/wp-json\/wp\/v2\/posts\/78\/revisions"}],"predecessor-version":[{"id":162,"href":"https:\/\/hoja.in\/blog\/wp-json\/wp\/v2\/posts\/78\/revisions\/162"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/hoja.in\/blog\/wp-json\/wp\/v2\/media\/79"}],"wp:attachment":[{"href":"https:\/\/hoja.in\/blog\/wp-json\/wp\/v2\/media?parent=78"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hoja.in\/blog\/wp-json\/wp\/v2\/categories?post=78"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hoja.in\/blog\/wp-json\/wp\/v2\/tags?post=78"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}