我是Typo3 / TypoScript的新手,我想知道是否以及如何将TypoScript中sql语句的结果提供给php函数。
到目前为止,我已经管理了userFunc,但我对其余部分感到困惑。 这是我的尝试:
temp.pidList = CONTENT
temp.pidList {
table = tx_eepcollect_sessions
#table = tt_content
select {
pidInList < plugin.tx_eepcollect_pi1.pid_list
where {
stdWrap.cObject = TEXT
stdWrap.cObject {
data = global : _COOKIE | tx_eepcollect_pi1
wrap = ses_id='|'
}
}
}
renderObj = COA
renderObj {
10 = TEXT
10.field = ses_data
#30 = TEXT
#30.data = debug:data
}
}
includeLibs.user_idList = fileadmin/services/user_IdList.php
temp.ListOfIds = USER
temp.ListOfIds.userFunc = user_IdList->get_IdList
#temp.pidList = TEXT
#temp.pidList = {"1275":{"id":"1275","tx_eepcollect_pi1":{"prozess":"add","pid":"1275","ctrl":"1360858765"},"cHash":"e90b62584f3f0e4f71bf1100faf39d83"}}
temp.ListOfIds.userFunc.jsonList < temp.pidList
temp.mainContent = COA_INT
temp.mainContent.10 = TEXT
temp.mainContent.10.stdWrap.cObject < temp.ListOfIds
输出是很多东西的数组,但不是数据库查询的结果。
答案 0 :(得分:1)
TypoScript不是一种编程语言,因此不会以任何意义执行。您应该将TS视为Core的指令集。 所以,按照以下行:
temp.ListOfIds.userFunc.jsonList < temp.pidList
不会将 temp.pidList 的结果放入 temp.ListOfIds.userFunc.jsonList 中,正如您对编程语言所期望的那样 - 它只会复制指令集,所以最后你会有以下结构:
temp.ListOfIds = USER
temp.ListOfIds.userFunc = user_IdList->get_IdList
temp.ListOfIds.userFunc.jsonList = CONTENT
temp.ListOfIds.userFunc.jsonList.table = tx_eepcollect_sessions
[...]
由于 jsonList 是您的自定义属性,因此您需要通过以下方法将stdWrap带到其中:
<强>的TypoScript 强>
temp.ListOfIds.userFunc.jsonList.cObject < temp.pidList
<强> PHP 强>
$jsonList = $this->cObj->stdWrap($conf['jsonList'], $conf['jsonList.']);
我假设您使用两个参数 $ content 和 $ conf从类 user_IdList 的方法 get_IdList 调用它
作为额外的measerue,您可以将其设为kickstarter或extension builder的扩展程序,这样您就可以更轻松地使用配置。
另一件事是,您的代码在此处存在潜在的SQL注入漏洞:
where {
stdWrap.cObject = TEXT
stdWrap.cObject {
data = global : _COOKIE | tx_eepcollect_pi1
wrap = ses_id='|'
}
}
因此,您可以考虑阅读markers