2009-10-28 19 views
15

Puedo recuperar una ID de vocabulario directamente desde DB, , pero ¿hay una función incorporada para esto?obtener ID de vocabulario por nombre

por ejemplo:

tengo un vocabulario llamada "lista", necesito que construyó en función toma "lista" como argumento de la función, y vuelvo un vid.

estoy usando Drupal 6

Respuesta

17

que tienen una función de esto, bueno, casi ..

/** 
* 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 desea que la vid acaba de obtener la propiedad de la vid y el objeto devuelto.

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

Henriks punto acerca de almacenarlo en una variable es muy válida como el código anterior no querrá estar en ejecución en cada petición.

Edición

También vale la pena señalar que en Drupal 7 se puede utilizar taxonomy_vocabulary_get_names() que hace esto un poco más fácil.

+1

+1 para agregar ejemplos –

+0

** Los usuarios de D7 tengan en cuenta: ** Utilice '$ vocab_object-> machine_name' en lugar de' -> name'. – mate64

4

No hay ninguna función integrada para esto, que yo sepa. Puede hacer la suya llamando al taxonomy_get_vocabularies() y buscar su nombre en la matriz resultante, pero esto hará una solicitud de base de datos en cada llamada.

Si tiene un vocabulario que a menudo usa del código, puede ser más fácil/más efectivo almacenar el video en una variable de Drupal a través del variable_set() una vez y recuperarlo a través del variable_get() (Muchos módulos que crean un vocabulario en la instalación lo hacen de esta manera).

Editar: aquí hay algunos ejemplos de código para hacer esto en la instalación del módulo.

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, espero que no te importe, pero una s Tenía algún código para no haber puesto una muestra para almacenar un vocabulario en la instalación. –

+0

@Jeremy: No hay problema, de nada. –

+0

Estaba a punto de sugerir taxonomy_get_vocabularies y vi su nota con respecto a * otra * llamada a DB en cada solicitud ... tiene razón. –

3

Debería ayudar.

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

Esto debería funcionar, pero ¿qué tal un cheque isset y devolver FALSE si no hay vocabulario con ese nombre? –

0

Conoce el tipo de nodo al que está asociado el vocabbary. Así que simplemente use taxonomy_get_vocabularies() y pase el tipo de nodo como argumento y obtendrá los detalles que desee.

14

para Drupal 7 si se conoce el nombre de la máquina vocabulario esta es la forma:

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

Si sólo se sabe el nombre real del vocabulario, puede utilizar esta función:

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 puede usar:

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