Typo3缓存未与globalVar typoscript条件一起使用

时间:2018-01-23 17:32:32

标签: caching typo3 typoscript typo3-7.6.x

我有多语言Typo3(7.6.22)设置会导致一些缓存问题。如果我使用以下TypoScript条件,则只有第一个访问的语言页面会被缓存。

[globalVar = LIT:0 < {$lib.sys_language_uid}]
lib.lang.home_action.value = http://{$lib.url.domain}{$lib.url.basePath}{$lib.language}.html
[global]
以这种方式定义$lib.sys_language_uid

[globalVar = GP:L > 0]
lib.sys_language_uid = 1
[global]
[globalVar = GP:L = 2]
lib.sys_language_uid = 2
[global]
...

我现在想知道,是什么导致了这个问题,以及如何解决这个问题,而不是将条件放在我的流体模板中。

2 个答案:

答案 0 :(得分:1)

我认为问题出现的原因是您的条件评估非常复杂。

TYPO3中的缓存是针对每个条件评估完成的(true - false) ATM我无法说明常量部分中的条件是否足以构成单独的缓存。并且还不清楚使用(更改)常量[*]的评估是否会创建单独的缓存。

让我们看看URL参数L的不同值会发生什么:

&amp; L = 0(或未设置)
在常量部分没有条件成立,所以lib.sys_language_uid根本没有设定 所以在设置中我们有:

[globalVar = LIT:0 < {$lib.sys_language_uid}] 

这是字面意思(0 < '{$lib.sys_language_uid}'),因为未定义常量。所以评估为TRUE

<强>&安培; L = 1
常量:

[globalVar = GP:L > 0]
lib.sys_language_uid = 1
[global]

此部分属实,我们将lib.sys_language_uid设置为1

在设置中我们现在有条件

[globalVar = LIT:0 < 1] 

也评估为真。

&amp; L = 2

[globalVar = GP:L > 0]
lib.sys_language_uid = 1
[global]
[globalVar = GP:L = 2]
lib.sys_language_uid = 2
[global]

这两个部分都是正确的,我们将lib.sys_language_uid设置为2

在设置中我们现在有条件

[globalVar = LIT:0 < 2] 

也评估为真。

&amp; L = 3(或更多值) 常量:

[globalVar = GP:L > 0]
lib.sys_language_uid = 1
[global]

只有第一部分属实,我们将lib.sys_language_uid设置为1

在设置中我们现在有条件

[globalVar = LIT:0 < 1] 

也评估为真。
这与&L=1的条件相同,这将使用相同的缓存! BOOM !!

结果:
[*]改变常数是一个坏概念!

在TS模板的设置部分中使用URL参数的评估,而不是在常量部分中将其加密。

答案 1 :(得分:0)

这可能是命名惯例,但通常是&#34; lib。&#34;在设置部分中定义。

[globalVar = LIT:0 < {$lib.sys_language_uid}] 

如果是这种情况并且你在那里定义了它,那么这是一个问题,因为它的值与语言保持不变。 条件&#34; LIT&#34;只能处理常量。

{$lib.sys_language_uid}应该是常数。

顺便说一句

如果我遇到这样的问题,我总是试着打印&#34;将TypoScript常量或cObject的值放入标记中,如:

page.headerData.123456 = TEXT
page.headerData.123456 { 
    value = {$lib.sys_language_uid}
    wrap = <test>|</test> 
}