프로그래밍 방식으로 용어를 만드시겠습니까?


32

어휘에 많은 용어 (~ 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).

어떤 아이디어?


1
용어는 실체입니다.entity_create()
Clive

이 코드 로이 작업을 시도했지만 $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).-어떤 아이디어?
Samsquanch

vid대신 사용해보십시오 vocabulary_name. 열이 아직 vid있는 것처럼 보이지만 taxonomy_term_data현재 아이디 대신 Vocab 이름입니다.
Clive

엔티티 데이터는 SQL 테이블에서 파생되지 않아야합니다 (아래 참조).

답변:


42

분류 모듈에서 무언가를 원한다는 것을 알고 있으므로 먼저 클래스 Drupal\taxonomy\Entity또는 해당 디렉토리를 찾아야합니다 Term. 이제 주석을 살펴보십시오 @ContentEntityType.

*   entity_keys = {
*     "id" = "tid",
*     "bundle" = "vid",
*     "label" = "name",
*     "uuid" = "uuid"
*   },

그래서 당신이 원하는 것은

$term = Term::create([
  'name' => 'test', 
  'vid' => 'client',
])->save();

때문에 label엔티티 키가 namebundle엔티티 키입니다 vid. ->save()전화를 추가했는데 저장하고 싶다고 가정합니다.


drupal8.ovh/en/tutoriels/55/… 에서 더 많은 옵션을 사용할 수 있습니다 .
colan

1
$term = \Drupal\taxonomy\Entity\Term::create(array( 'name' => 'whatever', 'vid' => 'tags', )); $term->save();나에게 치명적인 오류가 있습니다 : 전화를 정의되지 않은 방법 드루팔 \ 분류 \ 법인 \ 기간 : getType로
alberto56

15

이때 다른 방법으로 용어를 추가해야합니다 ( 답변 과 비교하여 ) 먼저 파일에서 시작해야합니다.

Drupal \ taxonomy \ Entity \ Term을 사용하십시오.

용어 클래스가 Drupal \ taxonomy \ Entity에 나열되어 있기 때문입니다. 그리고 taxonomy_term 매개 변수를 전달할 필요가 없습니다.

용어 :: 만들기

하나의 매개 변수 만 필요하기 때문에 (값이있는 배열) (이 분류법 모듈에서이 메소드에 대해 나열된 코드 아래)

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();
}

3
당신이 알고 싶을 수도있는 것. Entity::save()int를 반환 하므로 $ term은 1 일 가능성이 높습니다 . 상수 SAVED_NEW이거나 SAVED_UPDATED수행 된 작업에 따라 다릅니다. 그러나 ->save()and add 를 제거 하면 데이터베이스에 저장된 정보로 업데이트 $term->save();되었음을 알 수 $term있습니다. 당신이 지금 할 수있는 예$tid = $term->tid->value;
General Redneck

7
Term::create([
 'name' => ''Lama',
 'vid' => $vocabulary_id,
]);

다른 답변 entity_create()은 작동하지만 작동하지는 않습니다.


6

entityTypeManager():

$term = [
  'name'     => $name,
  'vid'      => $vocabulary,
  'langcode' => $language,
];

$term = \Drupal::entityTypeManager()->getStorage('taxonomy_term')->create($term);

2

devel / devel_generate가 어떻게 작동하는지 살펴보고 싶을 것입니다.

에서 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);

2

용어를 만들기 전에 해당 용어가 있는지 확인하는 것이 좋습니다. 코드는 다음과 같습니다.

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();

출처 : https://www.btmash.com/article/2016-04-26/saving-and-retrieving-taxonomy-terms-programmatically-drupal-8

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.