TypoScript中SQL to Userfunc的结果

时间:2013-02-15 16:38:43

标签: typo3 typoscript

我是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

输出是很多东西的数组,但不是数据库查询的结果。

1 个答案:

答案 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,您可以将其设为kickstarterextension builder的扩展程序,这样您就可以更轻松地使用配置。

另一件事是,您的代码在此处存在潜在的SQL注入漏洞:

   where {
      stdWrap.cObject = TEXT
      stdWrap.cObject {
        data = global : _COOKIE | tx_eepcollect_pi1
        wrap = ses_id='|'
      }
    }

因此,您可以考虑阅读markers