2009-10-28 13 views
15

Mogę pobrać identyfikator słownika bezpośrednio z DB, , ale czy jest tam wbudowana funkcja do tego?uzyskać identyfikator słownika o nazwie

na przykład:

Mam słownictwo o nazwie „aukcja”, muszę, że wbudowana funkcja przyjmuje, że „wystawianie” jako argument funkcji i powrót vid.

Używam Drupal 6

Odpowiedz

17

Mam funkcji do tego, no prawie ..

/** 
* This function will return a vocabulary object which matches the 
* given name. Will return null if no such vocabulary exists. 
* 
* @param String $vocabulary_name 
* This is the name of the section which is required 
* @return Object 
* This is the vocabulary object with the name 
* or null if no such vocabulary exists 
*/ 
function mymodule_get_vocabulary_by_name($vocabulary_name) { 
    $vocabs = taxonomy_get_vocabularies(NULL); 
    foreach ($vocabs as $vocab_object) { 
    if ($vocab_object->name == $vocabulary_name) { 
     return $vocab_object; 
    } 
    } 
    return NULL; 
} 

Jeśli chcesz vid prostu właściwość vid zwracanego obiektu i.

$vocab_object = mymodule_get_vocabulary_by_name("listing"); 
$my_vid = $vocab_object->vid; 

Punkt Henriksa o zapisaniu go w zmiennej jest bardzo ważny, ponieważ powyższy kod nie będzie działał na każde żądanie.

Edit

Warto również zauważyć, że w Drupal 7 można użyć taxonomy_vocabulary_get_names() który sprawia, że ​​to trochę łatwiejsze.

+1

+1 do dodawania przykładów –

+0

** Użytkownicy D7 powinni zwrócić uwagę: ** Użyj '$ vocab_object-> machine_name' zamiast' -> name'! – mate64

4

Nie ma wbudowaną funkcję do tego, AFAIK. Możesz przetasować swój własny, dzwoniąc pod numer taxonomy_get_vocabularies() i wyszukać swoje nazwisko w wynikowej tablicy, ale spowoduje to żądanie bazy danych podczas każdego połączenia.

Jeśli masz słownictwo, z którego często korzystasz z kodu, może być łatwiejsze/bardziej efektywne przechowywanie vid w zmiennej Drupal przez variable_set() raz i odzyskać je poprzez variable_get() (Wiele modułów, które tworzą słownik podczas instalacji to w ten sposób).

Edycja: tutaj jest przykładowy kod do wykonania instalacji modułu.

function mymodule_install() { 
    $ret = array(); 
    $vocabulary = array(
     'name' => t('myvocab'), 
     'multiple' => '1', 
     'required' => '0', 
     'hierarchy' => '1', 
     'relations' => '0', 
     'module' => 'mymodule', 
     'nodes' => array('article' => 1), 
    ); 
    taxonomy_save_vocabulary($vocabulary); 
    $vid = $vocabulary['vid']; 
    variable_set('mymodule_myvocab', $vid); 
    return $ret 
} 
+0

Henrik, mam nadzieję, że to nie przeszkadza, ale Mam kod, do którego nie wstawiłem próbki do przechowywania słownika podczas instalacji. –

+0

@Jeremy: Nie ma problemu, nie ma za co. –

+0

Chciałem zasugerować taxonomy_get_vocabularies i zobaczyłem twoją notatkę dotyczącą * innego * DB call na każde żądanie ... masz rację. –

3

Należy pomóc.

function _my_module_vid($name) { 
    $names = taxonomy_vocabulary_get_names(); 
    return $names[$name]->vid; 
} 
+0

To powinno zadziałać, ale co z sprawdzaniem isset i zwracaniem FALSE, jeśli nie ma słownika o tej nazwie? –

0

Znasz typ węzła, z którym powiązany jest vocaulbary. Po prostu użyj taxonomy_get_vocabularies() i podaj typ węzła jako argument, a otrzymasz szczegóły, których potrzebujesz!

14

Dla Drupal 7, jeśli znasz nazwę komputera słownictwo to jest sposób:

$vid = taxonomy_vocabulary_machine_name_load('your_vocabulary_name')->vid; 

Jeśli wiesz, tylko prawdziwe imię słownictwa, można użyć tej funkcji:

function _get_vocabulary_by_name($vocabulary_name) { 
    // Get vocabulary by vocabulary name. 
    $query = db_select('taxonomy_vocabulary', 'tv'); 
    $query->fields('tv', array(
    'machine_name', 
    'vid', 
)); 
    $query->condition('tv.name', $vocabulary_name, '='); 
    $vocabulary = $query->execute()->fetchObject(); 
    return $vocabulary; 
} 
0

W Drupal 7 można użyć:

$vocab_object = taxonomy_vocabulary_machine_name_load('vocabulary_name'); 
$my_vid = $vocab_object->vid; 
Powiązane problemy