Drupal 按名称获取词汇表id

Drupal 按名称获取词汇表id,drupal,drupal-6,Drupal,Drupal 6,我可以直接从DB中检索词汇id, 但是有没有一个内置的功能 例如: 我有一个词汇叫做“列表”, 我需要内置函数将“listing”作为函数参数,并返回 录像带 我使用的是drupal 6,没有内置函数。您可以通过调用并在结果数组中搜索您的姓名来滚动自己的名称,但这将在每次调用时执行数据库请求 如果您有一个经常从代码中使用的词汇表,那么通过once将vid存储在Drupal变量中并通过获取vid可能会更容易/更有效(许多在安装时创建词汇表的模块都是这样做的) 编辑:下面是一些在安装模块时执行此操作

我可以直接从DB中检索词汇id, 但是有没有一个内置的功能

例如:

我有一个词汇叫做“列表”, 我需要内置函数将“listing”作为函数参数,并返回 录像带


我使用的是drupal 6,没有内置函数。您可以通过调用并在结果数组中搜索您的姓名来滚动自己的名称,但这将在每次调用时执行数据库请求

如果您有一个经常从代码中使用的词汇表,那么通过once将vid存储在Drupal变量中并通过获取vid可能会更容易/更有效(许多在安装时创建词汇表的模块都是这样做的)

编辑:下面是一些在安装模块时执行此操作的示例代码

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
 }

我有一个函数,几乎

 /**
 * 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关于将其存储在变量中的观点非常有效,因为上面的代码并不希望在每个请求上都运行

编辑

还值得注意的是,在Drupal7中,您可以使用它,这使得这变得更容易

应该有帮助

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

您知道与vocaulbary关联的节点类型。因此,只需使用taxonomy\u get\u 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', [
    '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;

Henrik,我希望你不会介意,但是因为我有一些代码要写,所以我在安装时放了一个存储词汇表的示例。我正要建议分类法的词汇表,看到了你关于每次请求都要调用另一个DB的说明。。。你说得对。拼写错误应该是
taxonomy\u词汇表\u save
@SswaterShi:这个答案和代码是针对Drupal 6的,它就在那里。这应该有效,但是如果没有具有该名称的vocab,那么isset检查和返回FALSE会怎么样?D7用户请注意:使用
$vocab\u object->machine\u name
而不是
->name