it-swarm.asia

هل هناك Drupal API API للحصول على قائمة العقد حسب النوع؟

هل هناك Drupal API API مثل node_load() التي ستعرض قائمة العقد حسب نوع معين؟

لقد حاولت $nodes = node_load(array("type" => 'student_vote')) ، لكنها تُرجع عقدة واحدة فقط.

أعلم أنه يمكنني ترميز شيء مثل node_load() ، لكنني أردت أن أرى ما إذا كان هناك أي شيء من هذا القبيل بالفعل.

37
gmercer

اعتمادًا على إصدار Drupal:

دروبال 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);
47
Nikit

لا يوجد مثل API لـ Drupal 6. وأقرب ما يمكنك فعله هو الاستعلام بشكل صحيح عن كل معرف العقدة لنوع المحتوى ثم تحميل كل واحد باستخدام node_load () ولكن هذا سيتطلب 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).

بالنسبة إلى Drupal 7 ، يمكنك استخدام $nodes = node_load_multiple(array(), array('type' => $type)); ولكن الوسيطة $conditionsnode_load_multiple() تم إيقافها. بدلاً من ذلك ، يجب عليك استخدام EntityFieldQuery للاستعلام عن معرفات العقدة ثم استخدام 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']));
}
13
Pierre Buyle

هناك العديد من الإجابات الجيدة بالفعل ، لكنهم يأخذون السؤال حرفياً ويشيرون إلى العقد فقط.

نظرًا لأن D6 لا تحتوي على واجهة برمجة تطبيقات للقيام بما يُطلب منه ، وليس من الضروري قصر نفسك على العقد في D7 وما بعده ، أشعر أن الإجابة الجيدة يجب أن تكون عامة الكيان.

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[$]));
}
7
Letharion

احصل على قائمة العقد من نوع المحتوى

دروبال 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);

آمل أن يكون هذا مفيدا.

1
Nitesh Sethia

دروبال 8:

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