টাইপ এবং আইডি থেকে আমি কীভাবে কোনও সত্তার বান্ডিল পেতে পারি?


11

আমার bundleকোনও সত্তা এর typeএবং এর থেকে সনাক্ত করতে হবে id

উদাহরণস্বরূপ, যদি type'নোড' হয় এবং id7 হয়, আমি 'পৃষ্ঠা' হিসাবে পেতে পারি bundle

ধন্যবাদ

উত্তর:


11

entity_load@ নিখিল দ্বারা উল্লিখিত সত্তাটি লোড করতে ব্যবহার করুন ।

তারপরে বান্ডিলটি নিষ্কাশন করতে, সত্তা_পরিষ্কার_আইডি ব্যবহার করুন । উদাহরণ:

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

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

echo "Bundle name is : " . $bundle;

ফাংশনটি এমন entity_extract_idsএকটি সংখ্যাযুক্ত সূচকযুক্ত অ্যারে (হ্যাশ টেবিল নয়) প্রদান করে:

  • 0: সত্তার প্রাথমিক আইডি।
  • 1: সত্তার সংশোধন আইডি, বা UL সত্তা_প্রকারের সংস্করণ না থাকলে NULL।
  • 2: সত্তার বান্ডিলের নাম, বা UL সত্তা_প্রকারের কোনও বান্ডিল না থাকলে NULL।

যেখানে, 0, 1, এবং 2অ্যারের সূচকগুলি হয়। যাইহোক, কোর এবং অবদান মডিউল দ্বারা ব্যবহৃত পদ্ধতির list()ফাংশনটি ব্যবহার করা ।


আমি মনে করি অ্যারে সংখ্যাসূচক সূচকের উপর নির্ভর করা ভাল নয়।
জুনেদ

3
@ জুনাইদ যে সূচকটি অনুমানযোগ্য তাই এটি ঠিক আছে। এভাবেই ড্রুপাল কোর এই কাজটি পরিচালনা করে। যদি 'ম্যাজিক নম্বর' বিরক্ত করে তবে আপনি কেবল ভাষার বৈশিষ্ট্যগুলি ব্যবহার করেন: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();

সম্পাদনা: @ ক্লাইভ হিসাবে উল্লেখ করা হয়েছে, উপরোক্ত পদ্ধতিটি সত্তা মডিউলের উপর নির্ভর করে।

এখানে আরও একটি পদ্ধতি যা কোনও অতিরিক্ত মডিউলের উপর নির্ভর করে না। এটি এখানে ব্যাখ্যা করা হয়েছে 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()। এছাড়াও আপনি ইনস্টল করা সত্তা মডিউলটির উপর নির্ভর করে ...
ক্লাইভ

এটি অবিচ্ছিন্নভাবে ক্লিনার নয়, তবে এটি একটি বৈধ বিকল্প, বিশেষত যদি আপনি যাইহোক মেটাডেটা মোড়ক ব্যবহার করছেন। সম্ভবত @ দেবেলকার বা জুনাইদ তাদের উত্তরগুলি সম্পাদনা করতে পারলে বিকল্প দুটিই অন্তর্ভুক্ত করতে পারে? (জুনায়েদ, সম্ভবত আপনি সত্তা মডিউল এবং সত্তা_মেডাটা_রাপ্পেরগুলি সম্পর্কে পৃষ্ঠায় লিঙ্কগুলি যুক্ত করতে পারেন?)
অ্যালিস হিটন

3

সত্তা_লোড চেষ্টা করুন

ডাটাবেস থেকে সত্তা লোড করুন।

সত্তাগুলি একটি স্ট্যাটিক মেমরি ক্যাশে সংরক্ষণ করা হয় এবং একই পৃষ্ঠা অনুরোধের সময় আবার লোড করা হলে ডাটাবেস অ্যাক্সেসের প্রয়োজন হবে না।

পরামিতি

$ সত্তা_প্রকার : লোড করতে সত্তা টাইপ, যেমন নোড বা ব্যবহারকারী।

ids আইডিস : সত্তা আইডিগুলির একটি অ্যারে বা সমস্ত সত্ত্বাকে লোড করতে মিথ্যা।

$ শর্তাদি : (অবহেলিত) বেস টেবিলের শর্তগুলির একটি সহযোগী অ্যারে, যেখানে কীগুলি ডাটাবেস ক্ষেত্র এবং মানগুলি সেই ক্ষেত্রগুলির অবশ্যই মান must পরিবর্তে, এই ফাংশনটির দ্বারা লোডযোগ্য সত্তা আইডিগুলির একটি তালিকা পুনরুদ্ধার করতে এন্টিফিল্ডকিউরি ব্যবহার করা ভাল।

$ পুনরায় সেট করুন : অনুরোধ করা সত্তা ধরণের জন্য অভ্যন্তরীণ ক্যাশে পুনরায় সেট করতে হবে কিনা।

ফেরত মূল্য

তাদের আইডি দ্বারা সূচিত সত্তা অবজেক্টগুলির একটি অ্যারে। যখন কোনও ফলাফল পাওয়া যায় না, একটি খালি অ্যারে ফিরে আসে।


3

নোড আইডি থেকে নোড টাইপ পেতে আপনি যদি খুব হালকা ওজনের উপায়, পারফরম্যান্স অনুযায়ী চান- আপনি নোড টেবিলে একটি সিলেক্ট কোয়েরি ব্যবহার করতে পারেন।

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

এইভাবে, আপনার সত্তা_ লোড ইত্যাদির সাহায্যে পুরো সত্তা হুক সিস্টেমটি চালানোর দরকার নেই ..

এটি ইনডেক্সড নোড আইডি ব্যবহার করে একক সিলেক্ট ক্যোয়ারী।


আমরা এখানে কেবল নোড দিয়ে খেলছি না।
জুনায়েদ

ওপি লিখেছেন "উদাহরণস্বরূপ, টাইপটি যদি 'নোড' এবং আইডি 7 হয়, আমি বান্ডেল হিসাবে 'পৃষ্ঠা' পেতে পারি may" নোড ভিত্তিক উদাহরণ উত্তর।
ডেভিড থমাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.