2009-10-28 89 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;