Pregunta

Puedo recuperar una identificación de vocabulario directamente de DB, pero ¿hay una función integrada para esto?

por ejemplo:

tengo un vocabulario llamado '' listado '', Necesito que la función incorporada tome " listado " como argumento de función, y volver un vid.

estoy usando drupal 6

¿Fue útil?

Solución

Tengo una función para 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 el vid solo obtenga la propiedad vid del objeto devuelto y.

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

El punto de Henriks acerca de almacenarlo en una variable es muy válido ya que el código anterior no querrá ejecutarse en cada solicitud.

Edit

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

Otros consejos

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

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

Si solo conoce el nombre real del vocabulario, puede usar 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;
}

No hay una función integrada para esto, afaik. Puede rodar el suyo llamando a taxonomy_get_vocabularies () y busque su nombre en la matriz resultante, pero esto hará una solicitud de base de datos en cada llamada.

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

Editar: aquí hay un código de muestra 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
 }

Debería ayudar.

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

Usted sabe el tipo de nodo al que está asociado el vocabulario. ¡Así que solo use taxonomy_get_vocabularies () y pase el tipo de nodo como argumento y obtendrá los detalles que desea!

En Drupal 7 podría usar:

$vocab_object = taxonomy_vocabulary_machine_name_load('vocabulary_name');
$my_vid = $vocab_object->vid;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top