wdb / wdb-content-conditions
此扩展增加了两个不同的TypoScript条件,用于检查页面是否存在具有特殊值的元素。
Requires
- typo3/cms-core: ^10.4.43 || ^11.5.35
Replaces
- typo3-ter/wdb_content_conditions: v1.0.5
README
此扩展增加了一个TypoScript条件,用于检查网站是否存在具有特殊值的元素。包含两个条件,ttContent()
和 tt_content[]
-
功能条件
这是验证页面上的所有内容元素
语法是ttContent([字段名], [预期值], [值类型])
返回值:布尔型 / 数组
参数
字段名
:要验证的字段。预期值
:要检查的值,可选。值类型
:值的类型,可选。
由于返回值和可用操作符的限制,不建议将其与进一步的比较(如
a > b
)结合使用。不过,可以使用||
(或)或&&
(与)连接多个条件。重要的是要理解,没有内容元素被返回,但新条件通常执行布尔检查。
这意味着,在上述任何条件中,内容元素与下面的数量和属性相同,条件不会过滤内容元素。注意,所有查询都排除了删除或隐藏的记录,无一例外。
-
用于验证单个内容元素的数组条件。这可以用来检查单个元素的属性,甚至可以组合多个来检查单个元素的多个属性。语法是
tt_content[uid][字段名]
返回值:字符串 / 整数
返回值只是数据库中保存的内容,这并不尊重任何与文件或其他记录的关系。数组键
uid
:要验证的tt_content
记录的唯一ID。字段名
:要验证的字段。
附加条件的用例
检查内容元素中的值可以包括特殊的CSS、JS,或者在需要时仅配置页面或配置相关值。
示例
[ttContent("list_type", "tx_myextension_pi1", "str")]
page.includeCSS.mySlideshow = EXT:my_extension/Resources/Public/Css/mySlideshow.css
page.includeJSFooter.mySlideshow = EXT:my_extension/Resources/Public/JavaScript/mySlideshow.js
[global]
说明
ttContent()
是条件的名称,与同名数据库表相对应。对于初学者来说,可能会困惑,因为TypoScript中还存在同名变量。不过,使用ttContent()
作为条件的唯一方法是使用圆括号,因为它是函数。- 第一个参数
"list_type"
是要检查的字段的名称。字段名称的命名约定由数据库定义,不应包含空格、减号、括号或其他许多字符。 - 第二个参数 "tx_myextension_pi1" 是预期在字段
"list_type"
中找到的值。
此值的命名约定由TYPO3定义,不应包含空格、括号或其他许多字符。 - 第三个参数是值的类型,用于为DBAL(访问数据库的框架)分配常量。可以是
"int"
、"str"
、"bool"
等。重要的是,对于整数值应使用"int"
,其他情况不是那么重要,可以是"str"
。
例如,对于一些具有布尔值字段,如hidden
,此参数的值也可以使用"int"
,因为TYPO3通常将布尔值存储为整数(0或1)。
特殊用例:内容渲染操作
当然,也可以根据一个(甚至可能无关的)内容元素的属性更改内容元素的渲染定义。这可能是菜单,也可能是其他内容元素。然而,由于既不对内容元素也不对页面的渲染定义进行筛选,这些更改将适用于页面上的所有内容元素。
示例
条件[ttContent("header_layout", 3, "int")]
检查页面上所有内容元素中的header_layout
字段是否保存了值3。假设有一个记录具有此值,并且该记录的标题除了h3标签外还应该用em标签包装。但是代码tt_content.header.stdWrap.wrap = '<em>|<em>'
将包装所有内容元素的标题,无论它们分配了什么值。
@TODO:关于逻辑与、异或等运算符怎么办?
@TODO:关于FlexForm值怎么办?
@TODO:测试空值
@TODO:更新下面的示例,ttContent(field, value, type)
示例:[ ttContent("tx_webcan_st_bt_element", 5, "int") ]
功能条件的示例
[ttContent("colPos", 1, "int")]
检查页面上的tt_content
记录中的colPos
字段是否具有值1。
[ttContent("subheader")]
检查页面上的任何tt_content
记录中的subheader
字段是否已填写。
[ttContent("header", "Home", "str")]
检查页面上的tt_content
记录中的header
字段是否具有值"Home"。
[ttContent("header", "Home", "str") || ttContent("header", "Homa", "str")]
检查页面上的tt_content
记录中的header
字段是否具有值"Home"或"Homa"。
[ttContent("header", "Home", "str") && ttContent("header", "Homa", "str")]
检查页面上的tt_content
记录中的header
字段是否具有值"Home"以及另一个tt_content
记录具有值"Homa"。
此示例可能说明数据来自记录池,并且通常无法确定这些数据是否来自同一记录。如果请求的字段相同,并且通过AND(&&)组合,则它们肯定不会来自同一记录。因此,使用此条件不可能检查两个不同的属性(字段值)是否属于同一记录。
数组形式的条件示例
[tt_content[15]["colPos"] == 1]
检查页面上的tt_content
记录(uid
为15)中的colPos
字段是否具有值1。
[tt_content[15]["subheader"]]
检查页面上的tt_content
记录(uid
为15)中的subheader
字段是否已填写。
[tt_content[15]["header"] == "Home"]
检查页面上的tt_content
记录(uid
为15)中的header
字段是否具有值"Home"。
[tt_content[15]["header"] == "Home" || tt_content[15]["subheader"] == "Welcome"]
检查页面上的tt_content
记录(uid
为15)中的header
字段是否具有值"Home" OR subheader
字段具有值"Welcome"。
[tt_content[15]["header"] == "Home" && tt_content[15]["subheader"] == "Welcome"]
检查页面上的tt_content
记录(uid
为15)中的header
字段是否具有值"Home" AND subheader
字段具有值"Welcome"。此示例说明数据来自同一记录,并且拥有一个特定记录的唯一uid
可能会有用。
类似于此示例的字符串比较可能有助于结合同类的第三个条件,验证记录语言的sys_language_uid
:[tt_content[15]["header"] == "Home" && tt_content[15]["subheader"] == "Welcome"] && tt_content[15]["sys_language_uid"] == 1]