मैं एक प्रकार और आईडी से एक इकाई का बंडल कैसे प्राप्त कर सकता हूं?


11

मुझे bundleइसकी typeऔर से एक इकाई की पहचान करने की आवश्यकता है id

उदाहरण के लिए, यदि type'नोड' है और id7 है, तो मुझे 'पेज' मिल सकता है bundle

धन्यवाद

जवाबों:


11

entity_load@ निखिल द्वारा उल्लिखित इकाई को लोड करने के लिए उपयोग करें ।

फिर बंडल को निकालने के लिए Unit_extract_ids का उपयोग करें । उदाहरण:

$entity = entity_load('node', array('7'));

list(, , $bundle) = entity_extract_ids('node', $entity);

echo "Bundle name is : " . $bundle;

फ़ंक्शन entity_extract_idsतत्वों सहित एक संख्यात्मक रूप से अनुक्रमित सरणी (हैश तालिका नहीं) देता है:

  • 0: इकाई की प्राथमिक आईडी।
  • 1: इकाई का संशोधन आईडी, या NULL यदि $ unit_type का संस्करण नहीं है।
  • 2: इकाई का नाम बंडल, या NULL अगर $ unit_type का कोई बंडल नहीं है।

जहां, 0, 1, और 2सरणी सूचकांक कर रहे हैं। हालांकि, कोर और कंट्राब मॉड्यूल द्वारा उपयोग किया जाने वाला दृष्टिकोण list()फ़ंक्शन का उपयोग करना है।


मुझे लगता है कि ऐरे न्यूमेरिक इंडेक्स पर निर्भर रहना अच्छा नहीं है।
जुनैद

3
@Junaid यह इंडेक्स प्रेडिक्टेबल है इसलिए यह ठीक है। इस तरह से Drupal core इस कार्य को संभालती है। 'जादुई संख्या' परेशान तुम सिर्फ भाषा का प्रयोग का प्रचार करता है:list($id, $vid, $bundle) = entity_extract_ids($entity_type, $entity);
क्लाइव

@ जुनैद आप संख्यात्मक सूचकांक पर निर्भर हो सकते हैं, जब आप सुनिश्चित होते हैं कि वे नहीं बदलेंगे। मैंने संख्यात्मक सूचकांक का उपयोग क्यों किया, इसकी व्याख्या के लिए संपादन देखें। ऐसा इसलिए है क्योंकि एपीआई फ़ंक्शन को इस तरह से डिज़ाइन किया गया है। इसके अलावा, समाधान इकाई मॉड्यूल पर निर्भर नहीं है ;-)
अजीत

7

यहाँ सबसे साफ है जो मुझे कार्बनिक समूहों के मॉड्यूल कोड से मिला है।

$wrapper = entity_metadata_wrapper($entity_type, $entity_id);
$bundle = $wrapper->getBundle();

उदाहरण के लिए मैं इसे कॉल कर सकता हूं जैसे:

$wrapper = entity_metadata_wrapper('node', 1);
$bundle = $wrapper->getBundle();

संपादित करें: जैसा कि @Clive ने बताया है, उपरोक्त विधि इकाई मॉड्यूल पर निर्भर करती है।

यहां एक और तरीका है जो किसी भी अतिरिक्त मॉड्यूल पर निर्भर नहीं करता है। इसे यहाँ समझाया गया है https://forrst.com/posts/Get_the_bundle_of_a_Drupal_7_entity-0xW

उस विधि को कॉपी करते हुए कॉपी करें:

function _entity_get_bundle($entity, $entity_type) {
  $info = entity_get_info($entity_type);
  if (empty($info['entity keys']['bundle'])) {
    return $entity_type;
  } else {
    return $entity->{$info['entity keys']['bundle']};
  }
}

क्या है $group_type, $gid? और इसमें क्या मूल्य है $bundle ?
निकस्सैक

क्षमा करें, मैं उचित पैरामीटर नामों का उपयोग करना भूल गया। अब इसे सुधारा गया है।
जुनैद

आप इसके लिए वही कर सकते हैं entity_load, जिस तरह से यह सबसे साफ है?
निकस्सैक

1
व्यक्तिगत रूप से मुझे नहीं लगता कि entity_metadata_wrapper()यह entity_extract_ids()विधि की तुलना में साफ है । इसके अलावा आप इकाई मॉड्यूल पर भरोसा स्थापित किया जा रहा ...
क्लाइव

यह आवश्यक रूप से क्लीनर नहीं है, लेकिन यह एक वैध विकल्प है, खासकर यदि आप मेटाडेटा रैपर का उपयोग कर रहे हैं। शायद @develkar या जुनैद दोनों विकल्पों को शामिल करने के लिए अपने उत्तर को संपादित कर सकते हैं? (जुनैद, हो सकता है कि आप इकाई मॉड्यूल और एंटिटी के बारे में पेज से भी जोड़ सकते हैं_metadata_wrappers?)
ऐलिस हेटन

3

इकाई_ लोड करने का प्रयास करें

डेटाबेस से लोड संस्थाओं।

इकाइयाँ स्टैटिक मेमोरी कैश में संग्रहित होती हैं, और उसी पृष्ठ अनुरोध के दौरान दोबारा लोड होने पर डेटाबेस एक्सेस की आवश्यकता नहीं होगी।

पैरामीटर

$ Unit_type : इकाई प्रकार को लोड करने के लिए, जैसे नोड या उपयोगकर्ता।

$ आईडी : सभी संस्थाओं को लोड करने के लिए इकाई आईडी, या FALSE की एक सरणी।

$ स्थितियां : (पदावनत) आधार तालिका पर शर्तों की एक साहचर्य सारणी है, जहां कुंजी डेटाबेस फ़ील्ड हैं और मान वे मान हैं जो उन फ़ील्ड में होने चाहिए। इसके बजाय, इस फ़ंक्शन द्वारा लोड की जाने वाली इकाई आईडी की सूची को पुनः प्राप्त करने के लिए EntityFieldQuery का उपयोग करना बेहतर है।

$ रीसेट : अनुरोधित निकाय प्रकार के लिए आंतरिक कैश रीसेट करना है या नहीं।

प्रतिलाभ की मात्रा

इकाई वस्तुओं की एक सरणी उनके आईडी द्वारा अनुक्रमित। जब कोई परिणाम नहीं मिलता है, तो एक खाली सरणी वापस आ जाती है।


3

यदि आप नोड आईडी से नोड प्रकार प्राप्त करने के लिए एक बहुत ही हल्का तरीका, प्रदर्शन-वार चाहते हैं - तो आप नोड टेबल पर एक ही चुनिंदा क्वेरी का उपयोग कर सकते हैं।

$type = db_query("SELECT type FROM {node} WHERE nid = :nid", 
                  array(':nid' => $nid))->fetchField();

इस तरह, आपको संपूर्ण इकाई हुक प्रणाली, इकाई_ लोड आदि के साथ आह्वान करने की आवश्यकता नहीं है।

यह अनुक्रमित नोड आईडी का उपयोग करके एक एकल चयनित क्वेरी है।


हम यहां केवल नोड्स के साथ नहीं खेल रहे हैं।
जुनैद

ओपी ने लिखा "उदाहरण के लिए, यदि प्रकार 'नोड' है और आईडी 7 है, तो मुझे बंडल के रूप में 'पेज' मिल सकता है।" इसलिए नोड आधारित उदाहरण उत्तर।
डेविड थॉमस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.