wdb/wdb-content-conditions

此扩展增加了两个不同的TypoScript条件,用于检查页面是否存在具有特殊值的元素。

安装: 4

依赖项: 0

建议者: 0

安全: 0

星级: 0

关注者: 2

分支: 0

开放问题: 0

类型:typo3-cms-extension

v1.0.5 2024-03-27 17:27 UTC

This package is auto-updated.

Last update: 2024-09-27 18:26:05 UTC


README

此扩展增加了一个TypoScript条件,用于检查网站是否存在具有特殊值的元素。包含两个条件,ttContent()tt_content[]

  1. 功能条件
    这是验证页面上的所有内容元素
    语法是

    ttContent([字段名], [预期值], [值类型])

    返回值:布尔型 / 数组

    参数

    • 字段名:要验证的字段。
    • 预期值:要检查的值,可选。
    • 值类型:值的类型,可选。

    由于返回值和可用操作符的限制,不建议将其与进一步的比较(如 a > b)结合使用。不过,可以使用 ||(或)或 &&(与)连接多个条件。

    重要的是要理解,没有内容元素被返回,但新条件通常执行布尔检查。
    这意味着,在上述任何条件中,内容元素与下面的数量和属性相同,条件不会过滤内容元素

    注意,所有查询都排除了删除或隐藏的记录,无一例外。

  2. 用于验证单个内容元素的数组条件。这可以用来检查单个元素的属性,甚至可以组合多个来检查单个元素的多个属性。语法是

    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]