我有多语言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]
...
我现在想知道,是什么导致了这个问题,以及如何解决这个问题,而不是将条件放在我的流体模板中。
答案 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>
}