web-dev-qa-db-ja.com

機能を使用して語彙用語をエクスポートできないのはなぜですか?

OK、機能、uuid、uuid_featuresをインストールしました。

ドキュメントによると、分類機能を作成するときに、用語もエクスポートされます。

だから私はコマンドを実行します:

drush fe my_feature taxonomy:tags

しかし、機能の内部では常に、用語のようなものはありません。語彙だけがエクスポートされます。私は何を間違っていますか?

コードレビューから、hook_taxonomy_default_vocabulariesのみが実装されていることがわかります。

3
Codium

モジュール id_features を使用する必要があります。

必要な用語をリストして個々の用語をエクスポートすることも、語彙を使用してすべての用語をエクスポートすることもできます。

  1. Uuid_featuresを有効にする
  2. Admin/config/content/uuid_featuresに移動します
  3. [Exportable Taxonomy term bundles]の下の語彙のボックスをオンにします
    • すべての用語をエクスポートする場合は、「uuid用語の自動検出」オプションをオンにして、今後の追加/変更が追加されるようにします。
    • 「uuid用語を自動検出する」オプションを選択しなかった場合:drush fcを実行すると、新しいアイテム「uuid_term」が表示され、コンポーネントのリストを取得して、drush fe FEATURENAME uuid_term:THETERMSUUID1 uuid_term:THETERMSUUID2(実際に取得します)長いため、「uuid用語の自動検出」オプション)
    • 「uuid用語の自動検出」オプションを選択した場合:タクソノミーをエクスポートする必要があるだけなので、drush fe FEATURENAME taxonomy:VOCABNAMEを実行してください

奇妙な箇条書きリストについて、申し訳ありません。1つのリストで2つのオプションを表現しようとしています。

5
Duncanmoo

追加のモジュールなしで分類用語をエクスポートする最良の方法は、.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');
  }
}
0
Ales Rebec