টাইপ অনুসারে নোডের তালিকা পেতে কোনও ড্রুপাল এপিআই ফাংশন রয়েছে কি?


35

এর মতো কোনও ড্রুপাল এপিআই ফাংশন কি node_load()কোনও প্রদত্ত ধরণের দ্বারা নোডের একটি তালিকা ফেরত দেবে?

আমি চেষ্টা করেছি $nodes = node_load(array("type" => 'student_vote')), তবে এটি কেবল একটি নোড ফেরায়।

আমি জানি যে আমি এর মতো কিছু কোড আপ করতে node_load()পারি, তবে আমি ইতিমধ্যে সেখানে ইতিমধ্যে কিছু থাকতে পারে কিনা তা দেখতে চেয়েছিলাম।

উত্তর:


45

দ্রুপালের সংস্করণ অনুসারে:

ড্রুপাল 6:

$nodes = db_query('SELECT nid FROM {node} WHERE type="%s"', $type);

ড্রুপাল 7:

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

ড্রুপাল 8:

$nids = \Drupal::entityQuery('node')
  ->condition('type', 'NODETYPE')
  ->execute();
$nodes = \Drupal::entityTypeManager()
  ->getStorage('node')
  ->loadMultiple($nids);

হ্যাঁ, এটি কাজ করবে।
মুনির

6
মনে রাখবেন যে $ শর্তাবলী অ্যারে অবনতিযুক্ত এবং ড্রুপাল ৮-এ অপসারণ করা হবে, ভবিষ্যতের সামঞ্জস্যের জন্য এটিটিফিল্ডকুরি ( api.drupal.org/api/drupal/includes%21entity.inc/class/… ) ব্যবহার করা ভাল to নোড আইডস পান, তারপরে সেগুলি নোড_লোড_মલ્ટিয়প্লে () এর প্রথম যুক্তিতে পাস করুন। এখানে একটি দুর্দান্ত টিউটোরিয়াল রয়েছে: drupal.org/node/1343708
বালা ক্লার্ক

1
শুধু স্বচ্ছতার জন্য, EntityFieldQuery () Drupal এর 8. মধ্যে আর নেই
ইলিয়াস লিন

13

ড্রুপাল for এর জন্য এমন কোনও এপিআই নেই you আপনি যা করতে পারেন তার মধ্যে নিকটতম বিষয়বস্তুর ধরণের জন্য সমস্ত নোড আইডির জন্য সঠিকভাবে জিজ্ঞাসা করা উচিত তারপরে নোড_লোড () ব্যবহার করে প্রতিটি লোড করুন তবে এটির জন্য n + 1 টি প্রশ্নের প্রয়োজন হবে এবং এটি খুব কার্যকরী নয়।

function node_load_by_type($type, $limit = 15, $offset = 0) {
  $nodes = array();
  $query = db_rewrite_sql("SELECT nid FROM {node} n WHERE type = '%s'", 'n');
  $results = db_query_range($query, $type, $offset, $limit);
  while($nid = db_result($results)) {
    $nodes[] = node_load($nid);
  }
  return $nodes;
}

দ্রষ্টব্য: db_rewrite_sqlঅ্যাক্সেস চেক এবং অন্যান্য মডিউল সরবরাহিত ফিল্টারিং নিশ্চিত করবে (যেমন i18n মডিউল দ্বারা সরবরাহিত ভাষা ফিল্টারিং)।

ড্রুপাল 7 এর জন্য, আপনি ব্যবহার করতে পারেন $nodes = node_load_multiple(array(), array('type' => $type));তবে এর $conditionsযুক্তি node_load_multiple()হ্রাস করা হয়েছে। পরিবর্তে, নোড আইডিগুলির জন্য ক্যোয়ারী করার জন্য আপনাকে এনটিটিফিল্ডকিউরি ব্যবহার করা উচিত node_load_multiple()তবে কোনও $conditionযুক্তি ছাড়াই ব্যবহার করুন ।

function node_load_by_type($type, $limit = 15, $offset = 0) {
  $query = new EntityFieldQuery();
  $query->entityCondition('entity_type', 'node')
    ->entityCondition('bundle', $type)
    ->range($offset, $limit);
  $results = $query->execute();
  return node_load_multiple(array_keys($results['node']));
}

আসলে, আপনি ডি 6 তে নোড_লোড () এর মতো করে করলে: নোড_লোড (অ্যারে ('টাইপ' => 'পৃষ্ঠা')) আপনি সমস্ত পৃষ্ঠা নোডের একটি অ্যারে পাবেন।
ব্লেক সেনফটনার

@bsenftner নোড_লোড (অ্যারে ('টাইপ' => 'পৃষ্ঠা')) কেবল একটি নোড দেয়।
চিম করুন

7

ইতিমধ্যে বেশ কয়েকটি ভাল উত্তর রয়েছে তবে তারা প্রশ্নটি অক্ষরে অক্ষরে গ্রহণ করে এবং কেবল নোডগুলিকে উল্লেখ করে।

যেহেতু ডি 6 এর কাছে যা চাওয়া হচ্ছে তা করার জন্য একটি এপিআই নেই, এবং নিজেকে ডি 7 এবং নোডের মধ্যে সীমাবদ্ধ করার প্রয়োজন নেই, তাই আমি মনে করি একটি ভাল উত্তর সত্তা জেনেরিক হওয়া উচিত।

function entity_load_by_type($entity_type, $bundle, $limit = 10, $offset = 0) {
  $query = new EntityFieldQuery();
  $query->entityCondition('entity_type', $entity_type)
    ->entityCondition('bundle', $bundle)
    ->range($offset, $limit);
  $results = $query->execute();
  return entity_load($entity_type, array_keys($results[$]));
}

আমি সম্পর্কে একটি উত্তর যোগ করতে যাচ্ছি EntityFieldQuery, কিন্তু আপনি ইতিমধ্যে আপনার নিজের লিখেছেন। আমি কেবল যুক্ত করব যে দ্বিতীয়টি যুক্তিটি user_load_multiple()দ্রুপাল 7 এর পরে অবহেলা করা হয়েছে, এবং ব্যবহৃত কোডটি আপনি প্রদর্শন করা উচিত।
kiamlaluno

আমি বুঝতে পেরেছি যে, আমি এখনই সত্তা_লোড লোড ব্যবহার করার কারণে অবজ্ঞাত আর্গুমেন্ট সহ পুরানো সংস্করণগুলি উল্লেখ করার দরকার নেই। এইভাবে অবহেলিত কার্যকারিতাটি ব্যবহার করে লোকজনের দুর্ঘটনাক্রমে শেষ হওয়ার ঝুঁকি নেই। নাকি আপনি এর সাথে একমত নন?
লেথারিয়ন

1
তুমি কি বোঝাতে চাইলে array_keys($results[$entity_type])?
কমনপাইক

@ কমোনপাইক সম্ভবত হ্যাঁ এই মুহুর্তে আমার কাছে যাচাই করার সুযোগ নেই তবে আপনি এটি পরীক্ষা করে নিলে বিনা দ্বিধায় সম্পাদনা করতে এবং সংশোধন করতে পারেন। :)
লেটারিয়ন

আমি কিছুটা আলাদা করছি এবং নির্দিষ্ট করার দরকার ছিল entity_load($entity_type, array_keys($results['node']));। অন্যান্য সত্তার জন্য এটি পরীক্ষা করা হয়নি ..
কমনপাইক


1

কোনও সামগ্রীর ধরণ থেকে নোডের তালিকা পান

ড্রুপাল 6:

$nodes = db_query('SELECT nid FROM {node} WHERE type="%s"', 'student_vote');

ড্রুপাল 7:

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

ড্রুপাল 8:

$nids = \Drupal::entityQuery('node')
  ->condition('type', 'student_vote')
  ->execute();
$nodes = \Drupal::entityTypeManager()
  ->getStorage('node')
  ->loadMultiple($nids);

আশা করি এটি সহায়ক হবে।


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