2009-10-28 10 views
15

私はDBから直接 というボキャブラリIDを取得できますが、これには組み込み関数がありますか?例えば名前で語彙IDを取得

私は機能に組み込まれていることを必要とする「リスト」と呼ばれる語彙、 は、関数の引数として「リスト」を取得していて、 VIDを返します。

私は、このための機能で構築されたが、私の知る限り、ありませんDrupalの6

答えて

17

あなたはVIDだけで返されたオブジェクトのVIDプロパティを取得したい場合、私は..もほとんど、

/** 
* This function will return a vocabulary object which matches the 
* given name. Will return null if no such vocabulary exists. 
* 
* @param String $vocabulary_name 
* This is the name of the section which is required 
* @return Object 
* This is the vocabulary object with the name 
* or null if no such vocabulary exists 
*/ 
function mymodule_get_vocabulary_by_name($vocabulary_name) { 
    $vocabs = taxonomy_get_vocabularies(NULL); 
    foreach ($vocabs as $vocab_object) { 
    if ($vocab_object->name == $vocabulary_name) { 
     return $vocab_object; 
    } 
    } 
    return NULL; 
} 

を、このための機能を持っています。

$vocab_object = mymodule_get_vocabulary_by_name("listing"); 
$my_vid = $vocab_object->vid; 

Henriksが変数に格納することは、上記のコードと同じように非常に有効です。すべての要求に対して実行したくない場合があります。

編集も

のDrupal 7でこれが少し楽になりますどのtaxonomy_vocabulary_get_names()を使用できることは注目に値します。

+1

+1を追加する例 –

+0

** D7ユーザーは注意してください:** ' - > name'の代わりに' $ vocab_object-> machine_name'を使用してください! – mate64

4

を使用しています。 taxonomy_get_vocabularies()に電話して、結果の配列であなたの名前を検索することで自分のロールを張ることができます。しかし、これはすべての呼び出しでデータベース要求を行います。

あなたは、多くの場合、コードから使用する語彙を持っている場合、一度variable_set()経由Drupalの変数にVIDを保存し、インストールを行う上で語彙を作成variable_get()(多くのモジュールを経由して戻ってそれを得るために、より効果的/より簡単かもしれませんそれはこの方法です)。

編集:ここにモジュールインストールでこれを行うサンプルコードがあります。

function mymodule_install() { 
    $ret = array(); 
    $vocabulary = array(
     'name' => t('myvocab'), 
     'multiple' => '1', 
     'required' => '0', 
     'hierarchy' => '1', 
     'relations' => '0', 
     'module' => 'mymodule', 
     'nodes' => array('article' => 1), 
    ); 
    taxonomy_save_vocabulary($vocabulary); 
    $vid = $vocabulary['vid']; 
    variable_set('mymodule_myvocab', $vid); 
    return $ret 
} 
+0

ヘンリク、私はあなたが気にしないことを望むが、私はいくつかのコードをhadnに私はインストールのボキャブを格納するためのサンプルを入れていた。 –

+0

@Jeremy:問題ありません。どうぞよろしくお願いします。 –

+0

私はtaxonomy_get_vocabulariesを提案しようとしていて、リクエストごとに*別の* DB呼び出しに関するあなたのメモを見ました...あなたは正しいです。 –

3

助けてください。

function _my_module_vid($name) { 
    $names = taxonomy_vocabulary_get_names(); 
    return $names[$name]->vid; 
} 
+0

これはうまくいくはずですが、その名前のボキャブがない場合は、どのようなチェックをしてFALSEを返しますか? –

0

あなたは、ボキャブラリが関連付けられているノードタイプを知っていますか。だからtaxonomy_get_vocabularies()を使い、引数としてノード型を渡して、あなたが望む詳細を得ることができます! Drupalの7の場合

14

あなたは語彙のマシン名を知っていれば、これは方法です:

$vid = taxonomy_vocabulary_machine_name_load('your_vocabulary_name')->vid; 

あなたは語彙の唯一の本当の名前を知っている場合は、この機能を使用することができます。

function _get_vocabulary_by_name($vocabulary_name) { 
    // Get vocabulary by vocabulary name. 
    $query = db_select('taxonomy_vocabulary', 'tv'); 
    $query->fields('tv', array(
    'machine_name', 
    'vid', 
)); 
    $query->condition('tv.name', $vocabulary_name, '='); 
    $vocabulary = $query->execute()->fetchObject(); 
    return $vocabulary; 
} 
0

Drupalの7あなたが使用できます。

$vocab_object = taxonomy_vocabulary_machine_name_load('vocabulary_name'); 
$my_vid = $vocab_object->vid; 
関連する問題