প্রোগ্রামগতভাবে একটি শব্দ তৈরি?


32

আমি একটি শব্দভান্ডারে প্রচুর পদ (~ 200) যুক্ত করার চেষ্টা করছি, তবে দ্রুপাল 8-এর জন্য আপডেট হওয়া কোনও আমদানি মডিউল আমি খুঁজে পাচ্ছি না এবং মনে হচ্ছে ড্রুপাল 7-এ এটি করার কার্যকারিতা বিদ্যমান নেই দ্রুপাল ৮. সুতরাং, কেউ কি আমাকে এটি করার জন্য সঠিক দিকে নির্দেশ করতে পারে?

আমি 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()
ক্লাইভ

আমি এই কোডটি দিয়ে এটি করার চেষ্টা করেছি: $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).- কোনও ধারণা?
স্যামসকাঞ্চ

vidজায়গায় চেষ্টা করুন vocabulary_name। দেখে মনে হচ্ছে কলামটি এখনও vidরয়েছে taxonomy_term_data, তবে এটি এখন আইডির পরিবর্তে ভোকাবের নাম
ক্লাইভ

সত্তা ডেটা এসকিউএল টেবিল থেকে প্রাপ্ত করা উচিত নয়, নীচে দেখুন।

উত্তর:


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সত্তা কী nameএবং bundleসত্তা কী হয় vid। আমি একটি ->save()কল যুক্ত করার সাথে সাথে আমার ধারণা আপনি এটিও সংরক্ষণ করতে চেয়েছিলেন।


Drupal8.ovh/en/tutoriels/55/… এ আরও বিকল্প উপলব্ধ ।
কোলান

1
$term = \Drupal\taxonomy\Entity\Term::create(array( 'name' => 'whatever', 'vid' => 'tags', )); $term->save();আমাকে মারাত্মক ত্রুটি দেয়: অপরিজ্ঞাত পদ্ধতিতে কল করুন দ্রুপাল \ শ্রেনী \ সত্তা \ শব্দ :: getType
alberto56

15

এই সময় আপনি কিছুটা অন্য উপায়ে শব্দ যুক্ত করা উচিত ( এই উত্তরের সাথে তুলনা করে ) আপনার ফাইলের প্রথমে আপনার লেখা উচিত

ড্রুপাল \ শ্রেণীবদ্ধ \ সত্তা \ শব্দ ব্যবহার করুন;

কারণ টার্ম ক্লাসটি দ্রুপাল \ শ্রেণীবদ্ধ \ সত্তায় তালিকাভুক্ত। এবং আপনার কাছে ট্যাক্সোনমি_টারম প্যারামিটারটি পাস করার দরকার নেই

টার্ম :: সৃষ্টি

কারণ কেবলমাত্র একটি প্যারামিটারের প্রয়োজন (মানগুলির সাথে অ্যারে) (শ্রেণিবদ্ধ মডিউলে এই পদ্ধতির জন্য নীচে তালিকাভুক্ত কোড)

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
এমন কিছু যা আপনি জানতে চাইতে পারেন। $ মেয়াদটি সম্ভবত 1 এর সমান হবে কারণ Entity::save()কোনও int প্রদান করে। হয় স্থির হয় SAVED_NEWবা SAVED_UPDATEDসঞ্চালিত অপারেশন উপর নির্ভর করে। তবে, আপনি যদি অপসারণ করতে ->save()এবং যোগ $term->save();করতে চান তবে আপনি দেখতে পাবেন যে $termএটি ডাটাবেসে সংরক্ষণ করা তথ্য সহ আপডেট হয়েছে। উদাহরণস্বরূপ আপনি এখন করতে পারেন$tid = $term->tid->value;
জেনারেল রেডনেক

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

অন্যান্য উত্তরগুলি ব্যবহার করে entity_create(), যা কাজ করে তবে এটি তেমন সুন্দর নয়।



2

আপনি কীভাবে ডেভেল / ডেভেল_জেনারেট এটি করেন তা দেখতে চাইতে পারেন।

ডেভেল_জেনারেট থেকে :

$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-programmatic-drupal-8

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.