我正在进行我的第一个 Typo3 项目。我坚持了几天的努力。我在这里搜索并用谷歌搜索。但似乎,我的问题就是这么简单,以至于没有人问:-)
我的 setup.typoscript(来自 sitepackagebuilder.com)中有一个 FLUIDTEMPLATE。一切正常,网站看起来也像我想要的那样。
但是:我必须加入一个带有变量的 where 子句。这是我的代码:
page = PAGE
page {
10 = FLUIDTEMPLATE
10 {
variables {
dayNow = USER
dayNow.userFunc = VereinLilaWinkel\LilaWinkelTemplate\Schultermine->dayNow
day30 = USER
day30.userFunc = VereinLilaWinkel\LilaWinkelTemplate\Schultermine->day30
}
dataProcessing {
60 = TYPO3\CMS\Frontend\DataProcessing\DatabaseQueryProcessor
60 {
table = tx_mask_termin
pidInList = 123
selectFields = tx_mask_termin.*, usr_plz.plz, usr_plz.ort
leftjoin = usr_plz ON usr_plz.uid = tx_mask_termin.tx_mask_plzort
where = tx_mask_termin.tx_mask_datum BETWEEN {dateNow} AND {date30}
orderBy = tx_mask_termin.tx_mask_datum ASC
as = nextSchultermine
}
}
}
}
userFuncs 工作正常,例如我回来了(今天):
目标是让 where 语句起作用。到目前为止,我只能每天硬编码。所以我知道,其余的查询工作正常。
我尝试了所有我能找到的 wrap 和 dataWrap。我尝试了 lib.myValues,或者作为常量……我也向 ChatGPT 询问了它……还没有运行版本……变量不会在 where 子句中呈现!
我相信你可以在不使用 Userfunction 的情况下管理它。例如,您可以使用以下代码获取下个月的第一天 使用以下代码
DATE_ADD(LAST_DAY(NOW()), INTERVAL 1 DAY)
要获取当前日期,您可以使用以下代码
DAY(CURDATE()) AS current_day;
table = tx_mask_termin
pidInList = 123
selectFields = tx_mask_termin.*, usr_plz.plz, usr_plz.ort
leftjoin = usr_plz ON usr_plz.uid = tx_mask_termin.tx_mask_plzort
where = tx_mask_termin.tx_mask_datum BETWEEN DAY(CURDATE()) AND DATE_ADD(LAST_DAY(NOW()), INTERVAL 1 DAY)
orderBy = tx_mask_termin.tx_mask_datum ASC
as = nextSchultermine
也许你会这样尝试。或者您可以编写自己的自定义DataProcessor
因为
variables
和 DataProcessor
都在同一级别定义,并且没有嵌套 dataProcessing
你的方法必须失败。
原因是,变量在数据处理将要发生时不可用,因此您不能将它们作为 DataProcessor 的 TypoScript 的数据访问。
你仍然可以用 TypoScript 实现你想要的,因为有几个日期函数可以通过
stdWrap
.
60 = TYPO3\CMS\Frontend\DataProcessing\DatabaseQueryProcessor
60 {
table = tx_mask_termin
pidInList = 123
selectFields = tx_mask_termin.*, usr_plz.plz, usr_plz.ort
leftjoin = usr_plz ON usr_plz.uid = tx_mask_termin.tx_mask_plzort
where.cObject = COA
where.cObject {
10 = TEXT
10.value = now
10.strtotime = 1
10.noTrimWrap = |tx_mask_termin.tx_mask_datum BETWEEN | AND
20 = TEXT
20.value = +30 day
20.strtotime = 1
}
orderBy = tx_mask_termin.tx_mask_datum ASC
as = nextSchultermine
}
但是正如 Sivas 解决方案的评论中提到的,我建议改用自定义 DataProcessor。
谢谢 Jo Hasenau!
你是我的男人!感谢您描述问题和对 stdWrap 日期函数的提示。因为 tx_mask_datum 列实际上是 DATE 而不是 TSTAMP,我可以这样实现:
60 = TYPO3\CMS\Frontend\DataProcessing\DatabaseQueryProcessor
60 {
table = tx_mask_termin
pidInList = 123
selectFields = tx_mask_termin.*, usr_plz.plz, usr_plz.ort
leftjoin = usr_plz ON usr_plz.uid = tx_mask_termin.tx_mask_plzort
where.cObject = COA
where.cObject {
10 = TEXT
10.value = now
10.field = tstamp
10.date = Y-m-d
10.noTrimWrap = |tx_mask_termin.tx_mask_datum BETWEEN "|" AND
20 = TEXT
20 {
strtotime = +30 day
strftime = %Y-%m-%d
}
20.noTrimWrap = | "|"
}
orderBy = tx_mask_termin.tx_mask_datum ASC
as = nextSchultermine
}
作为一名 PHP 开发人员,在 typo3 的世界里,我常常不清楚。
非常感谢!