2010-11-22 6 views
0

node.tpl.phpに「print_r($ node)」と表示したとき。私はこれを得る。drupal --- taxonomy配列

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

このように、タクソノミーは配列であることがわかります。配列の値はオブジェクトです。それは質問が来るということです。私はPHPのマニュアルを何度も見上げて、 "配列の値がオブジェクトになることができる"という言葉が見つからない。なぜ、上記のコードをうまく実行できないのか。誰かが私にそれを説明できることを願っています。ありがとうございました。

+1

あなたの質問は何ですか?このマニュアルは明示的に*可能であることを許可していませんが、それは本当に重要ではありませんか?オブジェクトにアクセスする方法を知りたいですか? –

+0

つまり、phpでは、配列の値は何でもかまいません。私は正しい。 – runeveryday

+0

ええ、私はtidにアクセスしたい場合。どのようにコードを書く必要がありますか? – runeveryday

答えて

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つの用語しか持てないことがわかっている場合、あなたがこれをやっているテーマはサイト固有のものなので、これで十分です。 Else $tidsは、あなたが望むために使用するノードのすべてのtidの配列になります。

+0

私はこの行配列(tid => term_object)をどのようにして知ることができませんか? – runeveryday

+0

@rune:実際のコードではありません。なぜarray_keysを使うのが良い解決策であるかを説明するために使用された分類配列の形式です。 – googletorp

0

つまり、phpでは、配列の値は何でもかまいません。私は正しい。

はい、配列には任意のデータ型の値を格納できます。

echo $node["taxonomy"][1]->tid; 
関連する問題