Получить идентификатор словаря по имени
Я могу получить идентификатор словаря непосредственно из БД,
но есть ли встроенная функция для этого?
например:
У меня есть словарь под названием "листинг",
Мне нужна эта встроенная функция принимает "перечисление" в качестве аргумента функции и возвращает
a vid.
Я использую drupal 6
Ответы
Ответ 1
У меня есть функция для этого, ну почти..
/**
* 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(), что делает это немного проще.
Ответ 2
Для 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;
}
Ответ 3
Для этого нет встроенной функции afaik. Вы можете перевернуть свой собственный, вызывая 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
}
Ответ 4
Должен помочь.
function _my_module_vid($name) {
$names = taxonomy_vocabulary_get_names();
return $names[$name]->vid;
}
Ответ 5
Вы знаете тип node, к которому привязан вокалист. Поэтому просто используйте taxonomy_get_vocabularies() и передайте тип node в качестве аргумента, и вы получите нужную информацию!
Ответ 6
В Drupal 7 вы можете использовать:
$vocab_object = taxonomy_vocabulary_machine_name_load('vocabulary_name');
$my_vid = $vocab_object->vid;