Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to escape curly bracket "{" in TYPO3 Fluid template?

Tags:

typo3

fluid

I've a mixed HTML / JS template, when I'm working with JS arrays, Fluid tries to make autosubstitutions.

Is there a way to escape curly brackets in Fluid template ?

UPD :

Actual working syntax to escape JS parts is :

<script type="text/javascript">/*<![CDATA[*/
/*]]>*/
var llKeyOne = '{f:translate(key:"key1")}';
var llKeyTwo = '{f:translate(key:"key2")}';
/*<![CDATA[*/
var myTranslations = {
  llKeyOne: llKeyOne,
  llKeyTwo: llKeyTwo
};
/*]]>*/</script>
like image 916
Fedir RYKHTIK Avatar asked Jul 17 '13 09:07

Fedir RYKHTIK


4 Answers

Try to use

<![CDATA[...]]>

tags around your JS code.

like image 110
Susi Avatar answered Oct 17 '22 21:10

Susi


The CDATA solution stopped working in 8.7

I managed to solve the problem using alias in a usecase that heavily mixes javascript and fluid. {l} stands for left (open curly bracket) and {r} stands for right (close curly bracket):

<f:alias map="{l: '{', r: '}'}">
    var alter = {};
    <f:for each="{alterDB}" as="a">
        if (!alter[{a.einsatz}]) { alter[{a.einsatz}] = {}; }
        alter[{a.einsatz}][alter[{a.einsatz}].length] = {l} label: "{a.bezeichnung} ({a.kuerzel})", value: {a.uid} {r};
    </f:for>
</f:alias>
like image 20
Markus Kappe Avatar answered Oct 17 '22 22:10

Markus Kappe


Since it didn't worked for me in TYPO3 v8.7.16 with the <![CDATA[]]> solution above, I wanted to share my own solution. My "hack" to escape the brackets is to wrap those with a <f:format> viewhelper.

My goal was to output this in the frontend (400 and swing are fluid variables):

<ul data-animate="{duration:400, easing:'swing'}">
    ...
</ul>


I did this in the Fluidtemplate and it worked perfectly:

<ul data-animate="<f:format.raw>{</f:format.raw>duration: {data.myfield1}, easing:'{data.myfield2}'<f:format.raw>}</f:format.raw>">
    ...
</ul>
like image 5
Jan Fässler Avatar answered Oct 17 '22 22:10

Jan Fässler


Solution working in TYPO3 9.x / 9.5.x

To avoid too much markup around curly braces which has a "not so nice" impact on the summary markup (readability and IDE support / highlighting) here an additional solution.

Possible limitation: In our case the fluid template only contained fluid template variables within the templates head section followed by the entire markup which is processed/rendered by angular.js.

So we've created a partial for the angular.js part and included those inside the main fluid template.

Example: Use a partial for the angular.js part and disaple fluid parsing in there

The included partial file now starts using a {parsing off} statement (see example below).

Partial (simplified):

{parsing off} <!-- This solved all our issues -->

<div ng-show="showSlider">
    <div class="slider" data-test="slider-wrapper">
        <div class="row">
            <div class="slide-indicator-mask col-lg-12">
                <div class="slider-scope page-{{firstSlide}}"></div>
            </div>
    </div>
</div>
like image 3
Bernhard Avatar answered Oct 17 '22 23:10

Bernhard