通过名称获得词汇表
我有一个函数这一点,以及几乎..
/**
* 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()这使它成为一个更容易一些。
这里没有内置函数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
}
亨利克,我希望你不介意,但一我有一些代码让我把一个样本存储在安装词库中。 – 2009-10-29 11:08:04
@Jeremy:没问题,不客气。 – 2009-10-29 14:22:09
我正要建议taxonomy_get_vocabularies,并在每个请求中看到有关* another * DB调用的注释...您是对的。 – 2012-04-13 04:12:27
应该有所帮助。
function _my_module_vid($name) {
$names = taxonomy_vocabulary_get_names();
return $names[$name]->vid;
}
这应该起作用,但如果没有带有该名称的词汇,那么isset检查和返回FALSE如何? – 2012-10-26 19:12:34
您知道与词霸关联的节点类型。因此,只需使用taxonomy_get_vocabularies()并将节点类型作为参数传递,即可获得所需的详细信息!
为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;
}
在的Drupal 7你可以使用:
$vocab_object = taxonomy_vocabulary_machine_name_load('vocabulary_name');
$my_vid = $vocab_object->vid;
+1添加示例 – 2009-10-29 12:26:18
** D7用户请注意:**使用'$ vocab_object-> machine_name'而不是' - > name'! – mate64 2013-08-19 11:45:03