web-dev-qa-db-fra.com

Où puis-je trouver l'ID de vocabulaire ($ vid)?

Dans Drupal 6 j'irais dans la section taxonomie de mon/admin et je serais en mesure de trouver le $ vid (numérique) dans l'URL.

Dans Drupal 7 (sans doute en raison de l'introduction de termes en tant qu'entités), l'URL n'est plus aussi verbeuse (et certains diraient plus propre) car elle affiche maintenant le nom de la machine (nom du bundle?) du vocabulaire comme on peut le voir dans admin/structure/taxonomy/my_vocabulary/edit.

Ma fin de partie consiste à utiliser taxonomy_get_tree ($ vid, $ parent, $ max_depth, $ load_entities) pour charger mon vocabulaire et travailler avec lui de manière glorieuse et abondante, mais hélas, cette fonction n'accepte pas un nom_machine, mais préfère vraisemblablement le $vid.

J'accepte des alternatives pour charger un arbre de vocabulaire complet (c'est-à-dire tous les termes et leurs relations les uns avec les autres), mais je pense qu'il faut répondre directement à cette question pour les générations futures à Google.

23
electblake

En fait, vous pouvez utiliser:

$vocab = taxonomy_vocabulary_machine_name_load('my_vocabulary');
$vid = $vocab->vid;
33
Manu

Après Manu, si vous avez un accès Drush en ligne de commande, vous pouvez faire:

drush php-eval '$ tax = taxonomy_vocabulary_machine_name_load ("main_site_structure"); echo $ tax-> vid;'
10
Robin van Emden

Vous pouvez utiliser examiner manuellement le {taxonomy_vocabulary} table dans la base de données, puis vérifiez la colonne vid.

1
sumaiya

En D7

Si vous n'avez besoin que de l'ID de vocabulaire (vid) et que vous connaissez le nom de la machine, vous pouvez utiliser:

$query = db_select('taxonomy_vocabulary', 'tv');
$query->fields('tv', array('vid'));
$query->condition('tv.machine_name', __VOCAB_MACHINE_NAME, '=');
$result = $query->execute();
$data = $result->fetchAssoc();
$vid = $data['vid'];

Petite augmentation des performances: ~ 0,0036489963531494 secondes à ~ 0,00030779838562012 secondes.

Bien sûr, cela pourrait être adapté au besoin. Modifiez simplement la condition en fonction des informations dont vous disposez.

1
ryanka

J'utilise entity_load () pour charger mon objet vocab et recevoir son $ vid.

L'astuce consiste à passer false pour le 2ème paramètre (qui est $ids), puis référencez le taxonomy_vocabulary table dans votre base de données mysql pour voir ce que vous pouvez passer comme conditions. J'ai choisi d'utiliser le machine_name comme vous pouvez le voir ci-dessous:

$ids = false;
$conditions = array('machine_name' => 'my_vocabulary');
$vocab = entity_load('taxonomy_vocabulary', $ids, $conditions);

Si vous connaissez un moyen plus rapide/plus léger, veuillez l'offrir ici:)

1
electblake

C'est à charger en utilisant la requête de champ d'entité comme mention bojan:

$query = new entityFieldQuery();
$result = $query
  ->entityCondition('entity_type', 'taxonomy_vocabulary')
  ->propertyCondition('machine_name', 'my_vocabulary')
  ->execute();

if (empty($result['taxonomy_vocabulary'])) {
  return;
}

$vocabularies = taxonomy_vocabulary_load_multiple(array_keys($result['taxonomy_vocabulary']));
dpm($vocabularies);
0
Roy Segall

C'était le moyen le plus rapide pour moi de voir une liste de tous les ID de vocabulaire via Drush:

  1. Connectez-vous à votre base de données avec la commande Drush
    drush sqlc
  2. À l'invite mysql, tapez
    sélectionnez * dans taxonomy_vocabulary;
0
peezy