सभी सामग्री प्रकारों की सूची प्राप्त करें


10

मैं Drupal 8 साइट में परिभाषित सभी सामग्री प्रकारों की एक सूची कैसे प्राप्त करूं?

ड्रुपल 7 में यह हुआ करता था node_type_get_types(), लेकिन इसे हटा दिया गया है।

मैंने कोशिश की Entity::loadMultiple()लेकिन यह काम नहीं कर रहा है। मैं एक कस्टम क्वेरी बनाने के बारे में सोच रहा था, लेकिन मुझे नहीं पता कि यह डेटाबेस में कैसे संग्रहीत है।

जवाबों:


21

loadMultiple() इसके लिए ठीक होना चाहिए:

$types = \Drupal::entityTypeManager()
  ->getStorage('node_type')
  ->loadMultiple();

16

आप NodeType वर्ग का उपयोग करके सभी NodeType संस्थाओं (कॉन्फ़िग संस्थाओं) को लोड कर सकते हैं:

$node_types = \Drupal\node\Entity\NodeType::loadMultiple();
// If you need to display them in a drop down:
$options = [];
foreach ($node_types as $node_type) {
  $options[$node_type->id()] = $node_type->label();
}

2
स्थैतिक loadMultiple(), load()और create()विधियों के साथ चाल उन्हें इकाई प्रकार वर्ग पर कॉल करने के लिए है जिसे आप उपयोग करना चाहते हैं, फिर यह प्रकार का पता लगाता है और उपरोक्त गतिशील रूप से उपयोग करता है। यह थोड़ा छोटा और उपयोग करने में आसान है, लेकिन जब संभव हो तो इंजेक्शन सेवाओं का उपयोग करने की सिफारिश की जाती है, इसलिए सेवा / नियंत्रक / प्लगइन में, आप इकाई प्रकार के प्रबंधक को इंजेक्ट करेंगे और फिर उसका उपयोग करेंगे। आसान (इकाई) परीक्षण की अनुमति देता है लेकिन परिणाम कमोबेश एक ही है।
बेरदीर

1

एक अन्य ड्रुपल हेल्पर फ़ंक्शन है जो 8.7 के रूप में पदावनत नहीं है। node_type_get_names()रिटर्न:

string [] एक प्रकार का नोड प्रकार लेबल, नोड प्रकार नाम द्वारा कुंजीबद्ध।

एपीआई डॉक्स


यदि आपको फॉर्म सेलेक्ट (या चेकबॉक्स) विकल्प भरने की आवश्यकता है तो यह सबसे आसान उपाय है।
TytooF 10

0

node_type_get_names()भविष्य में अपदस्थ होने की स्थिति में प्रदान किया गया ( array_mapउपयोग का एक अच्छा उदाहरण ):

function node_type_get_names() {
  return array_map(function ($bundle_info) {
    return $bundle_info['label'];
  }, \Drupal::service('entity_type.bundle.info')
    ->getBundleInfo('node'));
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.