如何在流体中分配变量?

时间:2015-06-12 13:36:29

标签: typo3 fluid view-helpers

我希望viewhelper可以帮助在流体中分配变量,我不希望变量从控制器传递。

3 个答案:

答案 0 :(得分:12)

  

从TYPO3存储库安装名为vhs的扩展

在流体模板顶部定义名称空间,如下面的

{namespace v=FluidTYPO3\Vhs\ViewHelpers}

然后使用set viewhelper

<v:variable.set name="test" value="12345" />
Value of test : {test}
  

{test}将返回值12345

用于注册全局变量

<v:variable.register.set name="test" value="12345"/>]

获取全球变量的价值

Value of global variable : <v:variable.register.get name="test">
  

从TYPO3 8.7开始,流体为变量引入了viewhelper(不需要   (VHS)

<f:variable name="myvariable">My variable's content</f:variable>
<f:variable name="myvariable" value="My variable's content"/>

使用内联样式

{f:variable(name: 'myvariable', value: 'My variable\'s content')}
{myoriginalvariable -> f:variable.set(name: 'mynewvariable')}

答案 1 :(得分:8)

从TYPO3 8.6开始,这可以不用扩展名&#34; vhs&#34;:

<f:variable name="myvariable" value="My variable's content"/>

请参阅https://docs.typo3.org/typo3cms/extensions/core/Changelog/8.6/Feature-79402-VariableViewHelperForFluid.html

答案 2 :(得分:1)

由于第一个流体版本可以为特殊区域定义变量:VH f:alias使您能够在此VH的范围内定义新变量。这就是来自ext:vhs的variable.set VH的差异。

<f:alias map="{firstName: 'John', lastName: 'Doe'}">
     <p>Hello, my name is {firstName} {lastName}</p>
</f:alias> 

<f:for each="{users}" as="user" iteration="iterator">
    <f:if condition="{iterator.isFirst}">
        <v:variable.set name="firstName">{user.firstName}</v:variable.set>
        <v:variable.set name="lastName">{user.lastName}</v:variable.set>
    </f:if>
    :
    do other output
    :
</f:for>
<p>the first user was {firstName} {lastName}.</p>  

在流体中设置变量的问题是可以在流体内部进行编程逻辑:

<v:variable.set name="counter" value="0">
<f:for each="records" as="record">
   <f:if condition="{record.flag}">
       <v:variable.set name="counter">
           <f:cObject typoscriptObjectPath="lib.calc">
              {counter}+1
           </f:cObject>
       </v:variable.set>
   </f:if>
</f:for>
<p>there are {counter} records with a flag set.</p>

有这个typoscript

lib.calc = TEXT
lib.calc.current = 1
lib.calc.prioriCalc = 1