получить идентификатор лексики по имени - PullRequest
15 голосов
/ 28 октября 2009

Я могу получить идентификатор словаря прямо из БД, но есть ли встроенная функция для этого?

например:

у меня есть словарь под названием "листинг", мне нужно, чтобы встроенная функция принимала «перечисление» в качестве аргумента функции и возвращала видео.

я использую drupal 6

Ответы [ 6 ]

17 голосов
/ 29 октября 2009

У меня есть функция для этого, ну почти ..

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

Если вы хотите vid, просто получите свойство vid возвращаемого объекта и.

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

Замечание Хенрикс о сохранении его в переменной является очень верным, так как приведенный выше код вам не нужно запускать при каждом запросе.

Редактировать

Также стоит отметить, что в Drupal 7 вы можете использовать taxonomy_vocabulary_get_names () , что делает это немного проще.

15 голосов
/ 03 июля 2013

Для Drupal 7, если вы знаете имя словарного автомата, это путь:

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

Если вы знаете только настоящее имя словаря, вы можете использовать эту функцию:

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;
}
4 голосов
/ 29 октября 2009

Для этого нет встроенной функции, афаик. Вы можете свернуть свое собственное, позвонив по номеру taxonomy_get_vocabularies() и найти ваше имя в результирующем массиве, но это будет делать запрос базы данных при каждом вызове.

Если у вас есть словарь, который вы часто используете из кода, может быть проще / эффективнее сохранить vid в переменной Drupal через variable_set() один раз и вернуть его через variable_get() (Многие модули, которые создают словарь при установке, делают это так).

Редактировать: вот пример кода для этого при установке модуля.

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
 }
3 голосов
/ 10 февраля 2012

Должно помочь.

function _my_module_vid($name) {
  $names = taxonomy_vocabulary_get_names();
  return $names[$name]->vid;
}
0 голосов
/ 25 июня 2015

В Drupal 7 вы можете использовать:

$vocab_object = taxonomy_vocabulary_machine_name_load('vocabulary_name');
$my_vid = $vocab_object->vid;
0 голосов
/ 10 апреля 2013

Вы знаете тип узла, с которым связан словарь. Так что просто используйте taxonomy_get_vocabularies () и передайте тип узла в качестве аргумента, и вы получите необходимую информацию!

...