प्रोग्रामेटिक रूप से एक टर्म बनाएं?


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()
क्लाइव

मैंने इस कोड के साथ ऐसा करने का प्रयास किया: $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है, लेकिन यह अब आईडी के बजाय vocab नाम है
क्लाइव

इकाई डेटा 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इकाई कुंजी है nameऔर bundleइकाई कुंजी है vid। मैंने एक ->save()कॉल जोड़ा और साथ ही मैंने अनुमान लगाया कि आप इसे भी बचाना चाहते हैं।


अधिक विकल्प drupal8.ovh/en/tutoriels/55/… पर उपलब्ध हैं ।
colan

1
$term = \Drupal\taxonomy\Entity\Term::create(array( 'name' => 'whatever', 'vid' => 'tags', )); $term->save();मुझे घातक त्रुटि देता है: अपरिभाषित विधि से कॉल करें Drupal \ taxonomy \ Entity \ Term ::
getType

15

इस समय आपको शब्द को थोड़े दूसरे तरीके से जोड़ना चाहिए ( इस उत्तर की तुलना में ) सबसे पहले आपकी फ़ाइल में आपको लिखना शुरू करना चाहिए

Drupal \ taxonomy \ Entity \ टर्म का उपयोग करें;

क्योंकि 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
कुछ आप जानना चाहते हो सकता है। $ अवधि 1 सबसे अधिक संभावना के बराबर होगी क्योंकि Entity::save()एक इंट रिटर्न। या तो स्थिरांक SAVED_NEWया SAVED_UPDATEDऑपरेशन के आधार पर। हालाँकि, यदि आप को हटाने ->save()और जोड़ने के लिए थे, तो आप $term->save();देखेंगे कि $termडेटाबेस को सहेजे गए जानकारी के साथ अद्यतन किया गया है। उदाहरण अब आप कर सकते हैं$tid = $term->tid->value;
जनरल रेडनेक

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.