TYPO3 - 如何正确定义常量,将其存储到变量中并在流体模板中使用
TYPO3 - how to properly define constant, store it into variable and use inside of fluid template
在我正在开发的插件的 Fluid 模板中,有些东西是硬编码的。例如:
<f:else>
<li>
<v:page.link pageUid="114" />
</li>
</f:else>
由于 pageUid 值在测试和生产服务器上不相同,我想让它更动态。
我想以某种方式将其存储在变量中,然后在流体模板中使用该变量。
我只是不知道在 TYPO3 中制作这个和在哪里。
提前致谢!
在内容对象 FLUIDTEMPLATE 的打字模板中:
打字错误setup/configuration:
10 = FLUIDTEMPLATE
10 {
variables {
pageUid = TEXT
pageUid.value = 114
}
}
或使用常量
打字常量:
pageUid = 114
打字错误setup/configuration:
10 = FLUIDTEMPLATE
10 {
variables {
pageUid = TEXT
pageUid.value = {$pageUid}
}
}
然后你可以在你的 Fluid HTML
中获取 pageUid
<f:else>
<li>
<v:page.link pageUid="{pageUid}" />
</li>
</f:else>
要在 Fluid partial 中使用变量,请确保传递这些变量,例如通过提供 _all
:
<f:render partial="fluid_part_header" arguments="{_all}" />
如果您仍然使用 EXT:vhs
,您可以执行以下操作:
TS-Constants:
pageUid=114
TS-Setup:
settings.pageUid = {$pageUid}
模板(流体)
<f:else>
<li>
<v:page.link pageUid="{v:variable.typoscript(path: 'settings.pageUid')}" />
</li>
</f:else>
这将使其可用于所有 FLUID 模板。
因为这是一个设置,所以这样做:
常数:
plugin.myext.settings.detailPid = 123
设置:
plugin.myext.settings.detailPid = {$plugin.myext.settings.detailPid}
Variables是针对可变内容的。如果你有相同的 PID 使用带有 TEXT 或类似变量的变量是过度装饰并且设置是正确的方法。
此外,变量只能用于 FLUID_TEMPLATE 内容元素,不能用于插件!
同样在您的 extbase 控制器中,您可以通过简单的访问来访问这些设置 $this->settings['detailPid']
而无需先渲染 cObjects。
在您的流体中,您可以通过 {settings.detailPid}
访问设置。
请考虑使用 jokumer 的解决方案。
randomresult 的解决方案可行,但我不建议这样做。您不需要 vhs 来传递变量。
不谈论 Paul Beck 的解决方案,因为它根本行不通。至少不再是了。 (参见 TYPO3\CMS\Fluid\ViewHelpers\CObjectViewHelper、https://docs.typo3.org/typo3cms/ExtbaseGuide/Fluid/ViewHelper/CObject.html)。它只接受内容对象。
将您的 Pid 设置为 PID_SOME_PAGE = 123
等常量,并在您的插件设置中设置一个变量。像这样:
plugin.tx_yourplugin {
...
settings{
somePage = {$PID_SOME_PAGE}
}
...
}
如果需要,您可以绕过该常量版本并直接在设置中设置您的页面 ID。在我看来,这只是一种更简洁的方式,尤其是对于大型网站而言。
然后您可以在模板中使用该变量,例如 <f:link.page pageUid="{settings.somePage}">Go to Page</f:link.page>
。 f:link.page 的更多选项在这里:https://docs.typo3.org/typo3cms/ExtbaseGuide/Fluid/ViewHelper/Link/Page.html
在我正在开发的插件的 Fluid 模板中,有些东西是硬编码的。例如:
<f:else>
<li>
<v:page.link pageUid="114" />
</li>
</f:else>
由于 pageUid 值在测试和生产服务器上不相同,我想让它更动态。
我想以某种方式将其存储在变量中,然后在流体模板中使用该变量。
我只是不知道在 TYPO3 中制作这个和在哪里。
提前致谢!
在内容对象 FLUIDTEMPLATE 的打字模板中:
打字错误setup/configuration:
10 = FLUIDTEMPLATE
10 {
variables {
pageUid = TEXT
pageUid.value = 114
}
}
或使用常量
打字常量:
pageUid = 114
打字错误setup/configuration:
10 = FLUIDTEMPLATE
10 {
variables {
pageUid = TEXT
pageUid.value = {$pageUid}
}
}
然后你可以在你的 Fluid HTML
中获取pageUid
<f:else>
<li>
<v:page.link pageUid="{pageUid}" />
</li>
</f:else>
要在 Fluid partial 中使用变量,请确保传递这些变量,例如通过提供 _all
:
<f:render partial="fluid_part_header" arguments="{_all}" />
如果您仍然使用 EXT:vhs
,您可以执行以下操作:
TS-Constants:
pageUid=114
TS-Setup:
settings.pageUid = {$pageUid}
模板(流体)
<f:else>
<li>
<v:page.link pageUid="{v:variable.typoscript(path: 'settings.pageUid')}" />
</li>
</f:else>
这将使其可用于所有 FLUID 模板。
因为这是一个设置,所以这样做:
常数:
plugin.myext.settings.detailPid = 123
设置:
plugin.myext.settings.detailPid = {$plugin.myext.settings.detailPid}
Variables是针对可变内容的。如果你有相同的 PID 使用带有 TEXT 或类似变量的变量是过度装饰并且设置是正确的方法。
此外,变量只能用于 FLUID_TEMPLATE 内容元素,不能用于插件!
同样在您的 extbase 控制器中,您可以通过简单的访问来访问这些设置 $this->settings['detailPid']
而无需先渲染 cObjects。
在您的流体中,您可以通过 {settings.detailPid}
访问设置。
请考虑使用 jokumer 的解决方案。 randomresult 的解决方案可行,但我不建议这样做。您不需要 vhs 来传递变量。 不谈论 Paul Beck 的解决方案,因为它根本行不通。至少不再是了。 (参见 TYPO3\CMS\Fluid\ViewHelpers\CObjectViewHelper、https://docs.typo3.org/typo3cms/ExtbaseGuide/Fluid/ViewHelper/CObject.html)。它只接受内容对象。
将您的 Pid 设置为 PID_SOME_PAGE = 123
等常量,并在您的插件设置中设置一个变量。像这样:
plugin.tx_yourplugin {
...
settings{
somePage = {$PID_SOME_PAGE}
}
...
}
如果需要,您可以绕过该常量版本并直接在设置中设置您的页面 ID。在我看来,这只是一种更简洁的方式,尤其是对于大型网站而言。
然后您可以在模板中使用该变量,例如 <f:link.page pageUid="{settings.somePage}">Go to Page</f:link.page>
。 f:link.page 的更多选项在这里:https://docs.typo3.org/typo3cms/ExtbaseGuide/Fluid/ViewHelper/Link/Page.html