按名称获取词汇表id

时间:2009-10-28 20:31:06

标签: drupal drupal-6

我可以直接从DB中检索词汇表id, 但这有内置功能吗?

例如:

我有一个名为“列表”的词汇, 我需要内置函数将“listing”作为函数参数,并返回 视频。

我正在使用drupal 6

6 个答案:

答案 0 :(得分: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 :(得分:15)

对于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;
}

答案 2 :(得分:4)

没有内置功能,afaik。您可以通过调用taxonomy_get_vocabularies()来自行滚动并在结果数组中搜索您的名字,但这将在每次调用时执行数据库请求。

如果你有一个经常在代码中使用的词汇表,那么通过variable_set()将vid存储在Drupal变量中可能更容易/更有效,并通过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
 }

答案 3 :(得分:3)

应该有所帮助。

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

答案 4 :(得分:0)

您知道vocaulbary关联的节点类型。因此,只需使用taxonomy_get_vocabularyies()并将节点类型作为参数传递,您将获得所需的详细信息!

答案 5 :(得分:0)

Drupal 7 中,您可以使用:

$vocab_object = taxonomy_vocabulary_machine_name_load('vocabulary_name');
$my_vid = $vocab_object->vid;