2009-10-28 6 views
15

Je peux récupérer un id de vocabulaire directement à partir de DB, mais y at-il une fonction intégrée pour cela?obtenir le vocabulaire id par nom

par exemple:

j'ai un vocabulaire appelée « liste », j'ai besoin que construit en fonction prend « la liste » comme argument de la fonction, et retour une vid.

J'utilise 6

drupal

Répondre

17

J'ai une fonction pour cela, enfin presque ..

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

Si vous voulez que la vid juste obtenir la propriété vid de l'objet retourné et.

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

point de Henriks sur le stockage dans une variable est valide que le code ci-dessus, vous ne voulez pas être en cours d'exécution à chaque demande.

Modifier

A noter également que dans Drupal 7, vous pouvez utiliser taxonomy_vocabulary_get_names() ce qui en fait un peu plus facile.

+1

+1 pour ajouter des exemples –

+0

** Les utilisateurs de D7 notent: ** Utilisez '$ vocab_object-> machine_name' au lieu de' -> name'! – mate64

4

Il n'y a pas construit en fonction pour cela, autant que je sache. Vous pouvez lancer le vôtre en appelant le taxonomy_get_vocabularies() et rechercher votre nom dans le tableau résultant, mais cela fera une demande de base de données à chaque appel.

Si vous avez un vocabulaire que vous utilisez souvent à partir du code, il pourrait être plus facile/plus efficace pour stocker la vid dans une variable Drupal via variable_set() une fois et récupérer via variable_get() (De nombreux modules qui créent un vocabulaire lors de l'installation faire de cette façon). Edit: voici un exemple de code pour cela lors de l'installation du module.

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, je l'espère ne vous dérange pas, mais s J'avais un peu de code à utiliser pour mettre un sample à l'intérieur pour stocker un vocab sur l'installation. –

+0

@Jeremy: Pas de problème, de rien. –

+0

J'étais sur le point de suggérer taxonomy_get_vocabularies et j'ai vu votre note concernant * un autre * appel DB à chaque demande ... vous avez raison. –

3

Devrait aider.

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

Cela devrait fonctionner, mais qu'en est-il d'une vérification d'isset et de retourner FALSE s'il n'y a pas de vocabulaire avec ce nom? –

0

Vous connaissez le type de nœud auquel le vocaulbary est associé. Il suffit donc d'utiliser taxonomy_get_vocabularies() et de passer le type de noeud en argument et vous obtiendrez les détails que vous voulez!

14

Pour Drupal 7 si vous connaissez le nom de la machine de vocabulaire c'est la manière suivante:

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

Si vous ne connaissez que le nom réel du vocabulaire, vous pouvez utiliser cette fonction:

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

En Drupal 7 vous pouvez utiliser:

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