typo3 - TYPO3 - 更简单的方法,将 colPos 中的内容渲染到 Fluidtemplate 中?
问题描述
官方的 TYPO3 文档解释了如何创建(或复制)并使用 alib.dynamicContent
将列渲染到 Fluidtemplate 中。我不明白这个例子中到底发生了什么。TypoScript 有:
lib.dynamicContent = COA
lib.dynamicContent {
10 = LOAD_REGISTER
10.colPos.cObject = TEXT
10.colPos.cObject {
field = colPos
ifEmpty.cObject = TEXT
ifEmpty.cObject {
value.current = 1
ifEmpty = 0
}
}
20 = CONTENT
20 {
table = tt_content
select {
orderBy = sorting
where = colPos={register:colPos}
where.insertData = 1
}
}
90 = RESTORE_REGISTER
}
我在大量的 TYPO3 项目中使用了这个片段,并且经常问自己那里发生了什么。
我通过试验改变了这一点,并以:
lib {
dynamicContent = COA
dynamicContent {
10 = CONTENT
10 {
table = tt_content
select {
orderBy = sorting
where {
data = field:colPos
wrap = colPos=|
}
}
}
}
}
这似乎在做“完全相同”的事情——它在通过 cObject ViewHelper 调用时输出我的内容。
有人可以解释这是否或为什么这是呈现内容的更糟糕的方式吗?
这是lib.dynamicContent
-doc的链接:https ://docs.typo3.org/c/typo3/cms-fluid-styled-content/master/en-us/Installation/InsertingContentPageTemplate/Index.html#based-on-the-流体模板内容对象-cobj
解决方案
您应该查看此代码段以及有关流体视图帮助<f:cObject>
器的一些信息,可在此处找到:https ://docs.typo3.org/other/typo3/view-helper-reference/9.5/en-us/typo3/fluid /latest/CObject.html
正如你所看到的,有参数data
,这将被交给,这就是为什么这个片段非常有意义。原因是,将不同的选项放入对象的子句中有点困难。因此它增加了可读性,并且可以轻松扩展这些寄存器。currentValueKey
table
typoscriptObjectPath
where
CONTENT
因此,此示例中的寄存器用于输入字段的值,或者如果该data
字段为空colPos
,它将current
从t 产生异常。currentValueKey
0
lib.dynamicContent = COA
lib.dynamicContent {
10 = LOAD_REGISTER
10.colPos.cObject = TEXT
10.colPos.cObject {
field = colPos
ifEmpty.cObject = TEXT
ifEmpty.cObject {
value.current = 1
ifEmpty = 0
}
}
20 = CONTENT
20 {
table = tt_content
select {
orderBy = sorting
where = colPos={register:colPos}
where.insertData = 1
}
}
90 = RESTORE_REGISTER
}
我们使用该片段的修改版本来潜入CONTENT
对象的更多参数值。
所以我们可以交出一个数据字段pageUid
,如果没有设置,我们将使用uid
当前页面的。如果当前或目标页面被配置为显示来自另一个页面的内容,这将被覆盖,最后我们可以触发带有另一个数据字段的幻灯片。
lib.dynamicContent = COA
lib.dynamicContent {
5 = LOAD_REGISTER
5 {
colPos.cObject = TEXT
colPos.cObject {
field = colPos
ifEmpty.cObject = TEXT
ifEmpty.cObject {
value.current = 1
ifEmpty = 0
}
}
pageUid.cObject = TEXT
pageUid.cObject {
field = pageUid
ifEmpty.data = TSFE:id
}
contentFromPid.cObject = TEXT
contentFromPid.cObject {
data = DB:pages:{register:pageUid}:content_from_pid
data.insertData = 1
}
}
20 = CONTENT
20 {
table = tt_content
slide = -1
slide.if.isTrue.field = slide
select {
includeRecordsWithoutDefaultTranslation = 1
orderBy = sorting
where = {#colPos}={register:colPos}
where.insertData = 1
pidInList.data = register:pageUid
pidInList.override.data = register:contentFromPid
}
}
90 = RESTORE_REGISTER
}
这使我们能够<f:cObject>
在触发其他参数的同时使用视图助手,只需在数据数组中传递更多值即可。
推荐阅读
- typescript - 类型“{}”对象上不存在属性“条件”
- javascript - 并行执行命令 - nodejs
- javascript - 如何同步 Highcharts?
- regex - reex 匹配多行 - Golang
- bazel - 构建目标后,我可以让 bazel 触发额外的操作吗?
- ios - 通过单一信号的 VOIP 通知不起作用
- ajax - Laravel 中基于 Axios(Ajax)的 Foursquare API 不返回任何数据(500 内部服务器错误)
- ember.js - 如何在 ember 中启用 ds-rollback-attribute?
- c# - ContinueConversationAsync() 要求用户在发布机器人后先聊天
- html - 如果内容太长,用省略号水平滚动