0

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

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

4

1 回答 1

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带到它:

打字稿

temp.ListOfIds.userFunc.jsonList.cObject < temp.pidList

PHP

$jsonList = $this->cObj->stdWrap($conf['jsonList'], $conf['jsonList.']);

我假设,您是从user_IdList类的get_IdList方法调用它,并带有两个参数:$content$conf

作为额外的措施,您可以使用kickstarter扩展构建器将其作为扩展,因此您可以更轻松地进行配置。

另一件事是,您的代码在这里有潜在的 SQL 注入漏洞:

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

因此,您可以考虑阅读有关标记的内容

于 2013-02-15T17:59:12.977 回答