Dove trovo l'ID del vocabolario ($ vid)?


24

In Drupal 6 andrei nella sezione tassonomia del mio / admin e sarei in grado di trovare $ vid (numerico) nell'URL.

In Drupal 7 (senza dubbio a causa dell'introduzione di termini come entità) l'URL non è più così dettagliato (e alcuni direbbero più pulito) in quanto ora mostra il nome della macchina (nome del bundle?) Del vocabolario come si può vedere in admin/structure/taxonomy/my_vocabulary/edit.

Il mio fine del gioco è usare taxonomy_get_tree ($ vid, $ parent, $ max_depth, $ load_entities) per caricare il mio vocabolario e lavorare con esso in modi gloriosi e abbondanti, ma purtroppo questa funzione non accetta un nome_macchina ma presumibilmente preferisce il numerico $vid.

Accetterò alternative per caricare un albero di vocabolario completo (ovvero tutti i termini e le loro relazioni reciproche), ma penso che questa domanda dovrebbe avere una risposta diretta su Google per le generazioni future.


solo un indovinare ma sviluppare il modulo?
Jeremy French,

Risposte:



10

Seguendo Manu, se si dispone dell'accesso Drush da riga di comando, è possibile:

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

woa, non mi sarei mai aspettato una soluzione di droga :) grazie per aver spicening (e allargato) questa domanda e risposta
electblake

1

Sto usando entity_load () per caricare il mio oggetto vocab e ricevere $ vid.

Il trucco è passare falseper il 2o parametro (che è $ids) e quindi fare riferimento alla taxonomy_vocabularytabella nel database mysql per vedere cosa è possibile passare come condizioni. Ho scelto di usare machine_namecome puoi vedere di seguito:

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

Se conosci un modo più rapido / leggero, ti preghiamo di offrirlo qui :)


1
Usa EntityFieldQuery. $ condizioni sono deprecate e più limitate.
Bojan Zivanovic,

e così sono :) Vuoi inviare una risposta completa? In caso contrario, suppongo che invierò qualcosa qui per completare / chiudere questa domanda.
electblake,

1

È possibile utilizzare esaminare manualmente la {taxonomy_vocabulary}tabella nel database e quindi controllare la vidcolonna.


1

In D7

Se tutto ciò di cui hai bisogno è l'ID del vocabolario (vid) e conosci il nome della macchina, puoi usare:

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

Piccolo aumento delle prestazioni: da ~ 0,0036489963531494 secondi a ~ 0.00030779838562012 secondi.

Questo, ovviamente, potrebbe essere personalizzato in base alle esigenze. Cambia la condizione in base alle informazioni che hai.


0

Questo per caricare usando la query del campo entità come menzione 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

Questo è stato il modo più veloce per me di visualizzare un elenco di tutti gli ID del vocabolario tramite Drush:

  1. Connettiti al tuo database con il comando Drush
    drush sqlc
  2. Al prompt di mysql, digitare
    seleziona * da taxonomy_vocabulary;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.