語彙に多くの用語(〜200)を追加しようとしていますが、Drupal 8に更新されたインポートモジュールが見つかりません。これはDrupal 7では存在しませんDrupal 8には存在しません
コメントで提案されているように、次のコードを使用してentity_create
でそれを実行しようとしました:
$term_create = entity_create('taxonomy_term', array('name' => 'test', 'vocabulary_name' => 'client'));
しかし、私はこのエラーを受け取りました:
Drupal\Core\Entity\EntityStorageException: Missing bundle for entity type taxonomy_term in Drupal\Core\Entity\FieldableEntityStorageControllerBase->create() (line 65 of core/lib/Drupal/Core/Entity/FieldableEntityStorageControllerBase.php).
何か案は?
分類モジュールから何かが必要であることを知っているので、最初に_Drupal\taxonomy\Entity
_または対応するディレクトリを調べる必要があります。そこにTerm
クラスがあります。ここで注釈を見てください、それは_@ContentEntityType
_と書いてあります:
_* entity_keys = {
* "id" = "tid",
* "bundle" = "vid",
* "label" = "name",
* "uuid" = "uuid"
* },
_
だから、あなたが欲しいのは
_$term = Term::create([
'name' => 'test',
'vid' => 'client',
])->save();
_
label
エンティティキーはname
であり、bundle
エンティティキーはvid
であるためです。 ->save()
呼び出しを追加しただけでなく、あなたもそれを保存したいと思います。
この時点で、用語を少し別の方法で追加する必要があります( this 回答と比較して)最初に、ファイル内で次のように記述します
drupal\taxonomy\Entity\Termを使用します。
Drupal\taxonomy\EntityにリストされているTermクラスだからです。そして、あなたはtaxonomy_termパラメータをに渡す必要はありません
用語::作成
パラメータが1つだけ必要なため(値を含む配列)(分類法モジュールのこのメソッドの以下のコード)
public function create(array $values = array()) {
// Save new terms with no parents by default.
if (empty($values['parent'])) {
$values['parent'] = array(0);
}
$entity = parent::create($values);
return $entity;
}
最後の例は
use Drupal\taxonomy\Entity\Term;
$categories_vocabulary = 'blog_categories'; // Vocabulary machine name
$categories = ['test 1', 'test 2', 'test 3', 'test 4']; // List of test terms
foreach ($categories as $category) {
$term = Term::create(array(
'parent' => array(),
'name' => $category,
'vid' => $categories_vocabulary,
))->save();
}
_Term::create([
'name' => 'Lama',
'vid' => $vocabulary_id,
]);
_
他の答えはentity_create()
を使用しますが、これは機能しますが、OOPアプローチほどよくありません。
entityTypeManager()
の場合:
$term = [
'name' => $name,
'vid' => $vocabulary,
'langcode' => $language,
];
$term = \Drupal::entityTypeManager()->getStorage('taxonomy_term')->create($term);
Devel/devel_generateがこれをどのように行うかを確認したい場合があります。
From devel_generate :
$values['name'] = devel_generate_Word(mt_Rand(2, $maxlength));
$values['description'] = "description of " . $values['name'];
$values['format'] = filter_fallback_format();
$values['weight'] = mt_Rand(0, 10);
$values['langcode'] = LANGUAGE_NOT_SPECIFIED;
$term = entity_create('taxonomy_term', $values);
用語を作成する前に、用語が存在するかどうかを確認することをお勧めします。コードは次のとおりです。
use Drupal\taxonomy\Entity\Term;
if ($terms = taxonomy_term_load_multiple_by_name($term_value, 'vocabulary')) {
// Only use the first term returned; there should only be one anyways if we do this right.
$term = reset($terms);
} else {
$term = Term::create([
'name' => $term_value,
'vid' => 'vocabulary',
]);
$term->save();
}
$tid = $term->id();