Gdzie znajdę identyfikator słownika ($ vid)?

24

W Drupal 6 przechodziłbym do sekcji taksonomii mojego / admin i byłbym w stanie znaleźć $ vid (numerycznie) w adresie URL.

W Drupal 7 (bez wątpienia ze względu na wprowadzenie terminów jako bytów) adres URL nie jest już tak szczegółowy (a niektórzy powiedzieliby, że jest czystszy), ponieważ teraz pokazuje nazwę komputera (nazwę pakietu?) Słownictwa, jak można to zobaczyć w admin/structure/taxonomy/my_vocabulary/edit.

Moja gra końcowa polega na użyciu taksonomii_get_tree ($ vid, $ parent, $ max_depth, $ load_entities) do załadowania mojego słownictwa i pracy z nim w chwalebny i bogaty sposób, ale niestety ta funkcja nie akceptuje nazwy maszyny, ale przypuszczalnie woli numeryczną $vid.

Zaakceptuję alternatywy, aby załadować pełne drzewo słownictwa (tj. Wszystkie terminy i ich relacje ze sobą), ale uważam, że na to pytanie należy odpowiedzieć bezpośrednio dla przyszłych pokoleń google.

electblake
źródło
zgadnij, ale opracuj moduł?
Jeremy French

Odpowiedzi:

33

Właściwie możesz użyć:

$vocab = taxonomy_vocabulary_machine_name_load('my_vocabulary');
$vid = $vocab->vid;
Manu
źródło
1
Dokumenty
Joshua Stewardson
10

Postępując zgodnie z Manu, jeśli masz dostęp do wiersza poleceń Drush, możesz:

drush php-eval '$ tax = taxonomy_vocabulary_machine_name_load ("main_site_structure"); echo $ tax-> vid;'
Robin van Emden
źródło
woa, nigdy nie spodziewałem się drowiego rozwiązania :) dzięki za udzielenie licencji (i poszerzenie) na to pytanie i odpowiedź
electblake
1

Korzystam z entity_load (), aby załadować mój obiekt vocab i otrzymać jego $ vid.

Sztuką jest przekazanie falsedrugiego parametru (który jest $ids), a następnie odwołanie się do taxonomy_vocabularytabeli w bazie danych mysql, aby zobaczyć, co można przekazać jako warunki. Zdecydowałem się użyć, machine_namejak widać poniżej:

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

Jeśli znasz szybszy / lżejszy sposób, zaoferuj go tutaj :)

electblake
źródło
1
Użyj EntityFieldQuery. Warunki $ są przestarzałe i bardziej ograniczone.
Bojan Zivanovic
i tak są :) Chcesz przesłać pełną odpowiedź? Jeśli nie, zgadnę, że prześlę coś tutaj, aby uzupełnić / zamknąć to pytanie.
electblake
1

Możesz użyć ręcznie przejrzeć {taxonomy_vocabulary}tabelę w bazie danych, a następnie sprawdzić vidkolumnę.

sumaiya
źródło
1

W D7

Jeśli potrzebujesz tylko identyfikatora słownika (vid) i znasz nazwę maszyny, możesz użyć:

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

Mały wzrost wydajności: ~ 0,0036489963531494 sekund do ~ 0,00030779838562012 sekund.

Można to oczywiście dostosować w razie potrzeby. Po prostu zmień warunek na posiadane informacje.

ryanka
źródło
0

Jest to ładowanie przy użyciu zapytania pola encji jako wzmianki o Bojanie:

$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
źródło
0

To był dla mnie najszybszy sposób, aby zobaczyć listę wszystkich identyfikatorów słownictwa za pośrednictwem Drush:

  1. Połącz się z bazą danych za pomocą polecenia Drush
    drush sqlc
  2. W wierszu polecenia mysql wpisz
    wybierz * z taksonomii_słówka;
peezy
źródło