0

我正在尝试通过 COA tt_content.textmedia 中的 TypoScript 输出 [TSFE] [register] [initialVariable] 的值,但没有得到任何输出。

我已将 [initialVariable] 与 LOAD_REGISTER 定义为页面的 FLUIDTEMPLATE 对象中的流体变量。(当我在 FLUIDTEMPLATE 中输出 [initialVariable] 时,它可以工作。)

这是模板的摘录: 首先 [initialVariable] 被定义。

page = PAGE
page {

...

10 = FLUIDTEMPLATE
10 {

   ...

   variables {

   ...

   counterVariable = COA
   counterVariable.10 = LOAD_REGISTER
   counterVariable.10.initialVariable = foo
   }
  }
} 

稍后在模板中 [initialVariable] 应该在每个 textmedia 对象下输出(但它不起作用):

  tt_content.textmedia = COA

  ...

  tt_content.textmedia.40 = TEXT
  tt_content.textmedia.40.data = TSFE:register|initialVariable
  tt_content.textmedia.40.wrap = <p>|</p>

我知道 LOAD_REGISTER 没有范围问题,因为它设置了全局变量(标题只是一个预告片;-))而且我知道只有一个 [register] 数组。那么为什么当我尝试输出它时 [initialVariable] 未定义。是否与 TypoScript 的加载和解析顺序有关?

有人可以帮忙吗?任何想法表示赞赏。

4

2 回答 2

0

去掉TSFE:前面的。

tt_content.textmedia.40.data = register:initialVariable
于 2017-07-28T21:03:04.780 回答
0

从寄存器数组中读取总是一样的。它一定要是

data = register:myRegisterName

关键是,寄存器作为 LIFO 堆栈工作,将通过使用 LOAD_REGISTER 和 RESTORE_REGISTER 进行更改。因此,您必须确保每个 LOAD_REGISTER 都将通过 RESTORE_REGISTER 获得其对应部分,否则您将获得不可预知的结果,因为 TypoScript 的其他部分也使用了寄存器。另一方面,您必须确保在使用之前没有额外的 RESTORE_REGISTER 会删除您的寄存器值。

实际上 XXX_REGISTER 存在范围问题,因为它取决于渲染元素的顺序,这也会影响寄存器堆栈。

但实际问题是:您将两个不同的概念混为一谈,纯 TypoScript 与 XXX_REGISTER 和 FLUIDTEMPLATE 与变量,因此结果也几乎无法预测。因此,您应该选择变量或寄存器以避免您描述的问题。

此外,您可能想在此处查看 current、setCurrent 和 setContentToCurrent:https ://docs.typo3.org/typo3cms/TyposcriptReference/Functions/Stdwrap/Index.html#setcontenttocurrent

但这仍然不应该与变量和寄存器混合。

于 2017-08-04T06:23:28.653 回答