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

24

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 de l'ensemble?) 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 numérique $vid.

J'accepterai 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.

electblake
la source
juste une supposition mais un module de développement?
Jeremy French

Réponses:

33

En fait, vous pouvez utiliser:

$vocab = taxonomy_vocabulary_machine_name_load('my_vocabulary');
$vid = $vocab->vid;
Manu
la source
1
Documents
Joshua Stewardson
10

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;'
Robin van Emden
la source
woa, je ne m'attendais jamais à une solution drush :) merci d'avoir enrichi (et élargi) cette question et réponse
electblake
1

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

L'astuce consiste à passer falsepour le 2ème paramètre (qui est $ids), puis à référencer la taxonomy_vocabularytable dans votre base de données mysql pour voir ce que vous pouvez passer comme conditions. J'ai choisi d'utiliser le machine_namecomme 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 :)

electblake
la source
1
Utilisez EntityFieldQuery. $ les conditions sont dépréciées et plus limitées.
Bojan Zivanovic
et ils le sont donc :) Vous voulez soumettre une réponse complète? Sinon, je suppose que je vais soumettre quelque chose ici pour compléter / fermer cette question.
electblake
1

Vous pouvez utiliser examiner manuellement la {taxonomy_vocabulary}table dans la base de données, puis vérifier la vidcolonne.

sumaiya
la source
1

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.

ryanka
la source
0

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);
Roy Segall
la source
0

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;
peezy
la source