2010-11-22 61 views
0

當我在node.tpl.php中打印「print_r($ node)」時。我明白了。drupal ---分類數組

taxonomy] => Array (
           [1] => stdClass object (
                    [tid] =>1 
                    [vid]=>1 
                    [name]=>cms 
     ............) 
    ) 

所以從上面我知道分類是一個數組。數組的值是一個對象。問題來了。我一遍又一遍地查看了PHP手冊,沒有發現有一句話「數組的價值可能是一個對象」,爲什麼我不能很好地遵循上面的代碼。希望有人能向我解釋。謝謝。

+1

我不明白你的問題是什麼?手冊沒有明確地*允許*這是可能的,但這並不重要,是嗎?你想知道如何訪問該對象? – 2010-11-22 12:38:32

+0

換句話說,在php中,數組的值可以是任何值。我對嗎。 – runeveryday 2010-11-22 12:42:31

+0

是的,如果我想訪問tid。我應該如何寫代碼? – runeveryday 2010-11-22 12:43:41

回答

1

什麼佩卡寫:

echo $node["taxonomy"][1]->tid; 

從上面的例子來看,它並不是錯誤的。但是,由於您在node.tpl.php中執行此操作,因此您可能需要比此更強大的功能,因爲它僅適用於具有id爲1的項的節點。

由於分類術語數組是格式:

array(tid => term_object) 

您需要知道訪問術語對象的tid。不過,若你想要的TID,你可以得到的數組鍵:

$tids = array_keys($node["taxonomy"]); 

現在,你不知道或者有多少項有關聯到您的節點,因爲它可以通過設置進行更改,如果你這樣做了:

if (!empty($node["taxonomy"])) { 
    $tids = array_keys($node["taxonomy"]); 
    $tid = tids[0]; 
} 

你會得到第一學期的tid(tid最低的那個)。如果你從你的設置知道該節點只能有1個任期,並且你正在做的這個主題是特定於網站的,那麼這對你來說就足夠了。否則$tids將是您用於您的願望的節點的所有tid的數組。

+0

我無法知道這行數組(tid => term_object)從哪裏來? – runeveryday 2010-11-22 14:35:30

+0

@rune:這不是實際的代碼,只是用於解釋爲什麼使用array_keys是一個很好的解決方案的分類數組格式。 – googletorp 2010-11-22 14:54:17

0

換句話說,在php中,數組的值可以是任何值。我對嗎。

是的,一個數組可以容納任何數據類型的值。

代碼如何我應該寫

「路徑」 來訪問你看上面會變量:

echo $node["taxonomy"][1]->tid;