web-dev-qa-db-ja.com

同じモジュールでhook_taxonomy_default_vocabulariesが使用されている場合、hook_installで用語をどのように作成しますか?

これらの用語を作成するために必要な語彙を提供するモジュールで分類用語を作成しようとしています。

私が抱えている問題は、語彙がインストール時に利用できないことです。

私のモジュールはhook_taxonomy_default_vocabulariesを実装しています。これらの用語をhook_installで作成したいと思います。

これらの用語を作成する最良の方法は何ですか?

5
troynt

Hook_install()を使用することもできますが、 hook_enable() を使用して語彙が存在するかどうかを確認し、存在しない場合はプログラムで作成することをお勧めします。

$vocabularies = taxonomy_vocabulary_get_names();
$pos = array_search('my_vocabulary', $vocabularies);

if ($pos !== FALSE) {
  // its a keyed array so the $vid is actually $pos
  $vid = $pos;
} else {
  // arrays are more convenient to initialize
  $vocabulary = array(
     'name' => t('My Vocabulary'),
     'machine_name' => 'my_vocabulary',
     'description' => t('My description'),
     'hierarchy' => 1,
     'module' => 'your_module', // or nothing
     'weight' => 1
   );
   // argument must be an object
   $vocabulary = (object) $vocabulary;
   taxonomy_vocabulary_save($vocabulary);
   // horray, we have a vid now
   $vid = $vocabulary->vid;
}

// now that the vocab exists and you know the $vid, create your terms
// ...
4
Alex Weber