Onde encontro o ID do vocabulário ($ vid)?


24

No Drupal 6, eu iria para a seção de taxonomia do meu / admin e seria capaz de encontrar o $ vid (numérico) na URL.

No Drupal 7 (sem dúvida devido à introdução de termos como entidades), o URL não é mais tão detalhado (e alguns diriam mais limpo), como agora mostra o nome da máquina (nome do pacote?) Do vocabulário, como pode ser visto em admin/structure/taxonomy/my_vocabulary/edit.

Meu jogo final é usar taxonomy_get_tree ($ vid, $ parent, $ max_depth, $ load_entities) para carregar meu vocabulário e trabalhar com ele de maneiras gloriosas e abundantes, mas, infelizmente, essa função não aceita um nome_da_máquina, mas provavelmente prefere o numérico $vid.

Aceitarei alternativas para carregar uma árvore de vocabulário completa (ou seja, todos os termos e seus relacionamentos entre si), mas acho que essa pergunta deve ser respondida diretamente pelas futuras gerações no Google.


apenas um palpite, mas desenvolver módulo?
Jeremy French

Respostas:



10

Após o Manu, se você tiver acesso à linha de comando Drush, poderá:

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

woa, nunca esperei uma solução drush :) obrigado por spicening (e alargamento) esta pergunta e resposta
electblake

1

Estou usando entity_load () para carregar meu objeto de vocabulário e receber $ vid.

O truque é passar falseos 2º parâmetros (que são $ids) e depois referenciar a taxonomy_vocabularytabela no seu banco de dados mysql para ver o que você pode passar como condições. Eu escolhi usar o machine_namecomo você pode ver abaixo:

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

Se você conhece uma maneira mais rápida / leve, ofereça-a aqui :)


11
Use EntityFieldQuery. $ condições estão obsoletas e mais limitadas.
Bojan Zivanovic

e assim são :) Gostaria de enviar uma resposta completa? Caso contrário, acho que vou enviar algo aqui para concluir / fechar esta pergunta.
Electblake

1

Você pode examinar manualmente a {taxonomy_vocabulary}tabela no banco de dados e verificar a vidcoluna.


1

Em D7

Se tudo o que você precisa é o ID do vocabulário (vid) e você sabe o nome da máquina, pode 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'];

Pequeno aumento no desempenho: ~ 0.0036489963531494 segundos para ~ 0.00030779838562012 segundos.

Obviamente, isso pode ser adaptado conforme necessário. Basta alterar a condição para quais informações você possui.


0

Isso é para carregar usando a consulta de campo de entidade como menção 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);

0

Essa foi a maneira mais rápida de ver uma lista de todos os IDs de vocabulário via Drush:

  1. Conecte-se ao seu banco de dados com o comando Drush
    sqlc drush
  2. No prompt do mysql, digite
    selecione * de taxonomy_vocabulary;
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.