2009-10-28 88 views
15

我可以直接從DB獲取詞彙標識, 但是有沒有內置函數?通過名稱獲得詞彙表

例如:

我有一個叫做「上市」 詞彙,我需要的是內置函數以「上市」作爲函數參數,並返回 一個VID。

我正在使用drupal 6

回答

17

我有一個函數這一點,以及幾乎..

/** 
* 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; 
} 

如果你想VID剛剛得到的返回對象的VID財產。關於它存儲在一個變量

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

Henriks的一​​點是,你不會想爲每個請求運行上面的代碼非常有效。

編輯

另外值得一提的是,在Drupal 7,你可以使用taxonomy_vocabulary_get_names()這使它成爲一個更容易一些。

+1

+1添加示例 – 2009-10-29 12:26:18

+0

** D7用戶請注意:**使用'$ vocab_object-> machine_name'而不是' - > name'! – mate64 2013-08-19 11:45:03

4

這裏沒有內置函數afaik。您可以通過調用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

亨利克,我希望你不介意,但一我有一些代碼讓我把一個樣本存儲在安裝詞庫中。 – 2009-10-29 11:08:04

+0

@Jeremy:沒問題,不客氣。 – 2009-10-29 14:22:09

+0

我正要建議taxonomy_get_vocabularies,並在每個請求中看到有關* another * DB調用的註釋...您是對的。 – 2012-04-13 04:12:27

3

應該有所幫助。

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

這應該起作用,但如果沒有帶有該名稱的詞彙,那麼isset檢查和返回FALSE如何? – 2012-10-26 19:12:34

0

您知道與詞霸關聯的節點類型。因此,只需使用taxonomy_get_vocabularies()並將節點類型作爲參數傳遞,即可獲得所需的詳細信息!

14

爲Drupal 7,如果你知道的詞彙機器名是這樣的方式:

$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;