কোনও সামগ্রীর ধরণ থেকে সমস্ত নোডের উপরে কীভাবে পুনরাবৃত্তি করা যায়


22

আমি নির্দিষ্ট সামগ্রীর ধরণের সমস্ত নোডের ক্ষেত্র থেকে কিছু তথ্য পুনরুদ্ধার করতে চাই। আমি কীভাবে এটি ব্যবহার করব db_queryএবং সমস্ত নোড আইডি পাব তারপরে তাদের পুনরাবৃত্তি হবে know আমি যা জানতে চাই তা হ'ল যদি এখানে ড্রুপাল ফাংশন ব্যবহার করে অন্য উপায় থাকে।

উত্তর:


28

আপনি সরাসরি তথ্য মাধ্যমে প্রশ্ন করতে পারেন node_load_multiple()

$nodes = node_load_multiple(array(), array('type' => 'my_type'));

আপনার পছন্দ অনুসারে আপনি $conditionsঅ্যারের (দ্বিতীয় যুক্তি) হিসাবে আরও অনেক সম্পত্তির শর্ত যুক্ত করতে পারেন, সুতরাং স্থিতি, তৈরি ইত্যাদিও ন্যায্য খেলা।

$conditionsপ্রযুক্তিগতভাবে হ্রাস করা হয়েছে (আমি অনুকূলে কল্পনা করি EntityFieldQuery) তবে ড্রুপাল 7 থেকে যে কার্যকারিতাটি কখনও অপসারণের সম্ভাবনাগুলি মূলত কোনওটিই নয়। এটি খুব বেশি বিরতি হবে।


3
যদিও এটি দ্রুপাল 8 এ চলে গেছে।
এমপিডোনাদিও

আমি এই উত্তরটি গ্রহণ করব যেহেতু এটি ঠিক যা খুঁজছিলাম, তবে @ এমপিডি সমাধানটি ব্যবহার করব কারণ এটি ড্রুপাল 8 এর সাথেও কাজ করবে :)
ড্রস্লাস

@ ড্রেস্লাস হ্যাঁ এমপিডি-র পদ্ধতিটি অবশ্যই যাওয়ার সর্বোত্তম উপায়, আমার সম্ভবত এটি উল্লেখ করা উচিত ছিল - EntityFieldQueryসমস্ত উপায় :) আমি এটিকে অন্য যে কোনও কিছুর চেয়ে বেশি বংশের জন্য রেখেছি
ক্লাইভ

1
entity_load_multipleD8 এ বিদ্যমান। আপনি যদিও সম্পত্তি দ্বারা লোড করতে পারবেন না।

স্পষ্টির জন্য ধন্যবাদ। আমার অর্থ এই ছিল যে 8 শর্তগুলি ডি 8 থেকে চলে গেছে।
এমপিডোনাদিও

34

ড্রুপাল কোর একটি ক্লাস সরবরাহ করে EntityFieldQuery()। এটি ব্যবহারের জন্য একটি দস্তাবেজ পৃষ্ঠাও রয়েছে, এর প্রচুর উদাহরণ রয়েছে। এর সহজতম আকারে:

$query = new EntityFieldQuery();

$query->entityCondition('entity_type', 'node')
  ->entityCondition('bundle', 'page')
  ->propertyCondition('status', 1);

$result = $query->execute();

if (!empty($result['node'])) {
  $nids = array_keys($result['node']);
  $nodes = node_load_multiple($nids);

  foreach ($nodes as $node) {
    // do something awesome
  }
}

এটি "পৃষ্ঠা" টাইপের সমস্ত প্রকাশিত নোড লোড করবে। আপনার পর্যায়ক্রমে এটিকে সামঞ্জস্য করতে হবে

$query = new EntityFieldQuery();

$query->entityCondition('entity_type', 'node')
  ->entityCondition('bundle', 'page')
  ->propertyCondition('status', 1);

$result = $query->execute();

if (!empty($result['node'])) {
  $nids = array_keys($result['node']);

 foreach ($nids as $nid) {
    $node = node_load($nid, NULL, TRUE);
    // do something awesome
  }
}

একবারে খুব বেশি লোড এড়াতে, যা মেমরির সমস্যার কারণ হতে পারে।

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