Почему я не могу экспортировать словарные термины с помощью функций?
Хорошо, я установил функции, uuid, uuid_features.
В соответствии с документами термины vocab также должны экспортироваться при создании функции таксономии.
Поэтому я запускаю команду:
Таксономия Drush fe my_feature: теги
Но каждый раз внутри функции нет такой вещи, как термины. Экспортируется только словарный запас. Что я делаю не так?
Из обзора кода я вижу, что реализованы только hook_taxonomy_default_vocabularies.
2 answers
Вам необходимо использовать модуль uuid_features.
Можно как экспортировать отдельные термины, перечислив те, которые вы хотите, так и экспортировать все термины со словарем:
- Включить функции uuid_features
- Перейдите в раздел администратор/конфигурация/содержимое/uuid_features
- Установите флажки в словарях в разделе "Экспортируемые наборы терминов таксономии".
- Если вы хотите экспортировать все термины, установите флажок "Автоматическое определение терминов uuid", чтобы будущие дополнения / изменения будут добавлены.
- Если вы не выбрали опцию "Автоматическое определение терминов uuid": Выполните поисковую операцию, и вы увидите новый элемент "uuid_term", получите список компонентов и выполните поиск по имени функции uuid_term:THETERMSUUID1 uuid_term:THETERMSUUID2 (становится очень длинным, поэтому опция "Автоматическое определение терминов uuid")
- Если вы выбрали опцию "Автоматическое определение терминов uuid": вам просто нужно экспортировать таксономию, поэтому введите имя функции drush fe таксономия: ИМЯ ВОКАБА
Извините за странный маркированный список, пытаясь представить два варианта в одном списке.
Лучший способ экспортировать термины таксономии без каких-либо дополнительных модулей - это использовать update_hook_N() в вашем файле .install.
Вот код, который я использую:
/**
* Insert terms for MYVOCAB vocabulary.
*/
function MYMODULE_update_7101() {
$terms = array(
'Term #1',
'Term #2',
'Term #3',
'...',
);
// Check if term exists in vocabulary and add it if not.
MYMODULE_safe_add_terms($terms, 'MYVOCAB');
}
/**
* Helper function for adding terms to existing vocabularies.
*
* @param array $term_names
* @param string $vocabulary_machine_name
* @param int $weight
*/
function MYMODULE_safe_add_terms($term_names = array(), $vocabulary_machine_name = '', $weight = 100) {
// Make sure the vocabulary exists. This won't apply all desired options
// (description, etc.) but that's okay. Features will do that later.
// For now, we just need somewhere to stuff the terms.
$vocab = taxonomy_vocabulary_machine_name_load($vocabulary_machine_name);
// Load the vocabulary.
// Check if field already exists and add it if not existing.
if (is_object($vocab) && property_exists($vocab, 'vid') && $vocab->vid > 0) {
// Load each term.
$i = 0;
foreach ($term_names as $term_name) {
$term = taxonomy_get_term_by_name($term_name, $vocabulary_machine_name);
// Check if term exists and if it doesn't exist create a new one.
if (count($term) == 0) {
$term = (object)array(
'name' => $term_name,
'vid' => $vocab->vid,
'weight' => $weight + $i,
);
// Save new term.
taxonomy_term_save($term);
$i++;
}
}
drush_log($i . ' terms added to ' . $vocabulary_machine_name . ' vocabulary', 'notice');
}
else {
drush_log('Vocabulary "' . $vocabulary_machine_name . '"" not found', 'error');
}
}