OK、機能、uuid、uuid_featuresをインストールしました。
ドキュメントによると、分類機能を作成するときに、用語もエクスポートされます。
だから私はコマンドを実行します:
drush fe my_feature taxonomy:tags
しかし、機能の内部では常に、用語のようなものはありません。語彙だけがエクスポートされます。私は何を間違っていますか?
コードレビューから、hook_taxonomy_default_vocabulariesのみが実装されていることがわかります。
モジュール id_features を使用する必要があります。
必要な用語をリストして個々の用語をエクスポートすることも、語彙を使用してすべての用語をエクスポートすることもできます。
奇妙な箇条書きリストについて、申し訳ありません。1つのリストで2つのオプションを表現しようとしています。
追加のモジュールなしで分類用語をエクスポートする最良の方法は、.installファイルにupdate_hook_N()を使用することです。
これが私が使用するコードです:
/**
* 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');
}
}