¿Dónde encuentro la identificación de vocabulario ($ vid)?

24

En Drupal 6 iría a la sección de taxonomía de mi / admin y podría encontrar el $ vid (numérico) en la URL.

En Drupal 7 (sin duda debido a la introducción de términos como entidades), la URL ya no es tan detallada (y algunos dirían más limpia), ya que ahora muestra el nombre de la máquina (¿nombre del paquete?) Del vocabulario como se puede ver en admin/structure/taxonomy/my_vocabulary/edit.

Mi final del juego es usar taxonomy_get_tree ($ vid, $ parent, $ max_depth, $ load_entities) para cargar mi vocabulario y trabajar con él de formas gloriosas y abundantes, pero lamentablemente esta función no acepta un machine_name, pero presumiblemente prefiere el numérico $vid.

Aceptaré alternativas para cargar un árbol de vocabulario completo (es decir, todos los términos y sus relaciones entre sí), pero creo que esta pregunta debería responderse directamente en google para las generaciones futuras.

electblake
fuente
solo una conjetura pero desarrollar módulo?
Jeremy French

Respuestas:

33

En realidad puedes usar:

$vocab = taxonomy_vocabulary_machine_name_load('my_vocabulary');
$vid = $vocab->vid;
Manu
fuente
1
Documentos
Joshua Stewardson
10

Siguiendo a Manu, si tiene acceso a Drush en la línea de comandos, puede hacer lo siguiente:

drush php-eval '$ tax = taxonomy_vocabulary_machine_name_load ("main_site_structure"); echo $ tax-> vid;'
Robin van Emden
fuente
woa, nunca esperé una solución drush :) gracias por condimentar (y ampliar) esta pregunta y respuesta
electblake 05 de
1

Estoy usando entity_load () para cargar mi objeto de vocabulario y recibirlo es $ vid.

El truco consiste en pasar falselos parámetros 2 (que es $ids) y luego hacer referencia a la taxonomy_vocabularytabla en su base de datos mysql para ver qué puede pasar como condiciones. Elegí usar el machine_nameque puedes ver a continuación:

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

Si conoce una forma más rápida / ligera, ofrézcala aquí :)

electblake
fuente
1
Use EntityFieldQuery. Las condiciones $ están en desuso y son más limitadas.
Bojan Zivanovic
y así son :) ¿Te importa enviar una respuesta completa? Si no, supongo que enviaré algo aquí para completar / cerrar esta pregunta.
electblake
1

Puede utilizar examinar manualmente la {taxonomy_vocabulary}tabla en la base de datos y luego verificar la vidcolumna.

sumaiya
fuente
1

En D7

Si todo lo que necesita es el ID de vocabulario (vid) y conoce el nombre de la máquina, puede usar:

$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'];

Pequeño aumento del rendimiento: ~ 0.0036489963531494 segundos a ~ 0.00030779838562012 segundos.

Esto, por supuesto, podría adaptarse según sea necesario. Simplemente cambie la condición a la información que tiene.

ryanka
fuente
0

Esto es para cargar usando la consulta de campo de entidad como mención de 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
fuente
0

Esta fue la forma más rápida para mí de ver una lista de todas las ID de vocabulario a través de Drush:

  1. Conéctese a su base de datos con el comando Drush
    drush sqlc
  2. En el indicador de mysql, escriba
    seleccione * de taxonomy_vocabulary;
peezy
fuente