有人寫了這段代碼。
foreach ($node->taxonomy as $term) {
$tids[] = 't.tid = %d';
$args[] = $term->tid;
}
他如何知道在foreach中「$ node-> taxonomy」是一個數組?當我循環它, foreach($ node-> taxonomy as $ term){ } 我得到的輸出將是$ term的值。我不知道它是如何變成't.tid =%d'和$ term-> tid。謝謝。
有人寫了這段代碼。
foreach ($node->taxonomy as $term) {
$tids[] = 't.tid = %d';
$args[] = $term->tid;
}
他如何知道在foreach中「$ node-> taxonomy」是一個數組?當我循環它, foreach($ node-> taxonomy as $ term){ } 我得到的輸出將是$ term的值。我不知道它是如何變成't.tid =%d'和$ term-> tid。謝謝。
在與Drupal相關的代碼中,$node
幾乎總是由node_load()
函數產生的對象。由於每個模塊都有機會向該對象添加自己的屬性,因此很難找到這些屬性的中央文檔。
通過經驗和通過可變檢查,調味Drupal的開發人員知道設定$node->taxonomy
時總是術語對象的陣列(由taxonomy_get_term()
函數返回)通過它們各自的ID(名爲TIDS,對於期限ID)索引。當$op == 'load'
和由taxonomy_get_terms()
函數生成時,該陣列由taxonomy_nodeapi()
函數設置。
這個問題幾乎沒有提供任何信息,但我們可以猜測循環是爲了構建兩個數組,用於生成一個數據庫查詢,該數據庫查詢在與$node
對象匹配的tid列上進行過濾。由於條款的數據已存儲在$node->taxonomy
的條目中,因此我們希望此查詢不會用於重新加載條款以顯示其某些名稱和/或說明。收集't.tid =%d'可能是一個糟糕的主意,在收集所有$args
中的tid後,查詢將更好地使用單個"tid in (".
WHERE子句構建。db_placeholder($args)
.")"
這個問題很不清楚。節點對象下的所有項目都是數組。你可以自己檢查使用:
print_r($node); die;
或使用任何PHP調試器。
爲foreach,這是非常簡單的foreach ...我不明白這是什麼問題。
t.tid只是一個SQL查詢。 %d是$ args []的佔位符,它由$ term-> tid組成。它就像這樣的結構:PDO connections。
Drupal 6不使用PDO。 – marcvangend 2010-11-22 10:44:28