Programlı bir terim oluştur?


32

Bir kelime haznesine çok fazla terim eklemeye çalışıyorum (~ 200), ancak Drupal 8 için güncellenmiş herhangi bir içe aktarma modülü bulamıyorum ve Drupal 7’de bu işlevi yerine getirmediği anlaşılıyor. Drupal 8. Peki, birisi bunu yapmak için beni doğru yöne işaret edebilir mi?

entity_createYorumlarda önerildiği gibi bu kodla yapmaya çalıştım :

$term_create = entity_create('taxonomy_term', array('name' => 'test', 'vocabulary_name' => 'client'));

ama bu hatayı aldım:

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).

Herhangi bir fikir?


1
Bir terim varlıktır, yani ...entity_create()
Clive

Bunu bu kodla yapmaya çalıştım:, $term_create = entity_create('taxonomy_term', array('name' => 'test', 'vocabulary_name' => 'client'));ama hatayı aldım 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).- Herhangi bir fikrin var mı?
Samsquanch

vidYerine deneyin vocabulary_name. Dış görünüş sütunu hala seviyorum vidde taxonomy_term_data, ama şimdi yerine id vocab adını bulunuyor
Clive

Varlık verileri, SQL tablolarından türetilmemelidir, aşağıya bakınız.

Yanıtlar:


42

Taksonomi modülünden bir şey istediğinizi biliyorsunuz, o yüzden önce Drupal\taxonomy\Entity- ya da ilgili dizine - bakmak zorundasınız, Termoradaki sınıfı bulacaksınız . Şimdi ek açıklamalara bakın, yazıyor @ContentEntityTypeve orada:

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

Yani istediğin şey

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

Çünkü labelvarlık anahtarı nameve bundlevarlık anahtarı vid. Bir ->save()arama ekledim , senin de kaydetmek istediğini varsayıyorum.



1
$term = \Drupal\taxonomy\Entity\Term::create(array( 'name' => 'whatever', 'vid' => 'tags', )); $term->save();bana ölümcül hata veriyor: undefined yöntemine çağrı Drupal \ taxonomy \ Entity \ Term :: getType
alberto56 18

15

Şu anda terimi biraz başka bir şekilde eklemelisiniz ( bu cevaba göre) Dosyanızda her şeyden önce yazmalısınız

Drupal \ taxonomy \ Entity \ Term kullanın;

Çünkü Drupal \ taxonomy \ Entity öğesinde listelenen Terim sınıfı. Ve taxonomy_term parametrelerini iletmeniz gerekmez.

Terim :: oluşturmak

çünkü sadece bir parametre gereklidir (değer içeren dizi) (taksonomi modülünde bu yöntem için aşağıda listelenen kodun altındadır)

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

Yani son örnek

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
Bilmek isteyebileceğin bir şey. $ terim 1'e eşit olacaktır, çünkü Entity::save()int döndürür. Sabitler SAVED_NEWveya SAVED_UPDATEDgerçekleştirilen işleme bağlı olarak. Bununla birlikte, kaldırmak ->save()ve eklemek için, veritabanına kaydedilen bilgilerle güncellendiğini $term->save();göreceksiniz $term. Şimdi yapabileceğiniz örnek$tid = $term->tid->value;
General Redneck

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

Diğer cevaplar entity_create()işe yarar , ama işe yaramaz ama pek hoş değil.


6

İle entityTypeManager():

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

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

2

Devel / devel_generate'in bunu nasıl yaptığını görmek isteyebilirsiniz.

Gönderen 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

Bir terim oluşturmadan önce, var olup olmadığını kontrol etmek daha iyidir, işte kod:

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

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.