2009-10-28 9 views
15

Ich kann eine Vokabuliste direkt aus DB, abrufen, aber gibt es eine eingebaute Funktion dafür?bekommen Vokabelnummer nach Name

zum Beispiel:

ich habe ein Vokabular als „listing“, ich brauche, dass „Listing“ als Funktionsargument in Funktion gebaut nimmt, und das Rück ein vid.

i drupal bin mit 6

Antwort

17

Ich habe eine Funktion dafür, naja fast ..

/** 
* 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; 
} 

Wenn Sie das vid nur die vid Eigenschaft des zurückgegebenen Objekts erhalten und.

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

Henriks Punkt, um es in einer Variablen zu speichern ist sehr gültig, wie der obige Code Sie werden nicht bei jeder Anfrage ausgeführt werden sollen.

bearbeiten

auch erwähnenswert, dass in Drupal 7 Sie taxonomy_vocabulary_get_names() verwenden können, die dies ein wenig leichter macht.

+1

+1 zum Hinzufügen von Beispielen –

+0

** D7 Benutzer beachten Sie bitte: ** Verwenden Sie '$ vocab_object-> machine_name' anstelle von' -> name'! – mate64

4

Es gibt keine für diese integrierte Funktion, afaik. Sie können Ihre eigene Nachricht erstellen, indem Sie taxonomy_get_vocabularies() aufrufen und im resultierenden Array nach Ihrem Namen suchen. Dies führt jedoch bei jedem Aufruf eine Datenbankanforderung aus.

Wenn Sie ein Vokabular, das Sie oft von Code verwenden, könnte es einfacher/effektiver sein, das vid in einer Drupal Variable über variable_set() einmal und es über variable_get() (viele Module, die ein Vokabular erstellen erhalten zu speichern wieder installieren zu tun es auf diese Weise).

Edit: Hier ist ein Beispielcode für die Modulinstallation.

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, ich hoffe, es Ihnen nichts ausmacht, sondern ein s Ich hatte einen Code, den ich nicht eingegeben hatte. Ich habe ein Beispiel für die Speicherung eines Vokabels bei der Installation eingefügt. –

+0

@ Jeremy: Kein Problem, gern geschehen. –

+0

Ich war dabei, taxonomy_get_vocabularies vorzuschlagen und habe Ihre Notiz bezüglich * eines anderen * DB-Anrufs bei jeder Anfrage gesehen ... Sie haben Recht. –

3

Sollte helfen.

+0

Dies sollte funktionieren, aber was ist mit einem Isset-Check und Rückgabe FALSE, wenn es keinen vocab mit diesem Namen gibt? –

0

Sie kennen den Knotentyp, dem der Vokabular zugeordnet ist. Verwenden Sie einfach taxonomy_get_vocabularies() und übergeben Sie den Knotentyp als Argument und Sie erhalten die gewünschten Details!

14

Für Drupal 7, wenn Sie das Vokabular Maschinennamen diese wissen, ist die Art und Weise:

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

Wenn Sie nur den wirklichen Namen des Wortschatzes kennen, können Sie diese Funktion verwenden:

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

In Drupal 7 könnten Sie verwenden:

$vocab_object = taxonomy_vocabulary_machine_name_load('vocabulary_name'); 
$my_vid = $vocab_object->vid;