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.


zgadnij, ale opracuj moduł?
Jeremy French

Odpowiedzi:



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

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 :)


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ę.


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.


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);

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;
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.