2010-11-22 36 views
0

有人寫了這段代碼。

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。謝謝。

回答

4

在與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 (". db_placeholder($args) .")" WHERE子句構建。

0

這個問題很不清楚。節點對象下的所有項目都是數組。你可以自己檢查使用:

 
print_r($node); 
die; 

或使用任何PHP調試器。

爲foreach,這是非常簡單的foreach ...我不明白這是什麼問題。

0

t.tid只是一個SQL查詢。 %d是$ args []的佔位符,它由$ term-> tid組成。它就像這樣的結構:PDO connections

+0

Drupal 6不使用PDO。 – marcvangend 2010-11-22 10:44:28

相關問題