2013-02-15 72 views
0

我對Typo3/TypoScript非常陌生,我想知道是否以及如何將TypoScript中的sql語句的結果提供給php函數。TypoScript中的SQL與Userfunc的結果

我已經管理了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

究竟是什麼需要的? temp.pidList或temp.ListOfIds的輸出? 如果你問的是userfunc,那麼請複製粘貼php代碼。 – 2013-02-15 16:48:21

回答

1

TypoScript不是一種編程語言,所以不會執行任何含義。您應該將TS視爲核心指令集。 所以,下面一行:

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

Typo腳本

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

PHP

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

我認爲,你從一個方法類user_IdList的get_IdList用兩個參數調用它:$內容$ conf

作爲附加measerue,您可以將它作爲kickstarterextension builder的擴展名,因此您可以更輕鬆地使用配置。

另一件事是,你的代碼有潛在的SQL注入漏洞的位置:

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

那麼,你可以考慮閱讀markers

+0

豎起大拇指的解釋,但這真的有用嗎?我問,因爲我認爲'stdWrap()'期待當前內容作爲第一個參數。當你傳遞cObject的名字時,它看起來像'cObjGetSingle()'方法應該被調用:'$ this-> cObj-> cObjGetSingle($ conf ['jsonList'],$ conf ['jsonList。')) ' – tmt 2013-02-15 18:39:13

+0

@cascaval,你是對的 - stdWrap期望內容作爲第一個參數,在我們的例子中它將是_NULL_,這就是爲什麼我使用'jsonList.cObject' - 這將指示stdWrap從給定的cObject加載內容,在我們的例子中是_CONTENT_。你的方法也是正確的(當然,如果沒有將'.cObject'添加到'jsonList'),但是它將_jsonList_屬性限制爲僅用於cObject,所以它不再可以包含帶stdWrap的純字符串。但在目前的問題,這也是很好:) – 2013-02-15 19:49:16

+0

我明白了。那應該是有效的。但是,您不會將* NULL *作爲第一個參數傳遞給'stdWrap()'。您正在傳遞字符串「CONTENT」。我會說'temp.ListOfIds.userFunc.jsonList = CONTENT'和'temp.ListOfIds.userFunc.jsonList.table = tx_eepcollect_sessions'這兩行不需要在那裏,調用可以是'$ jsonList = $ this- > cObj-> stdWrap('',$ conf ['jsonList。']);' – tmt 2013-02-18 08:59:54