Есть ли функция API Drupal для получения списка узлов по типу?

Есть ли функция API Drupal, такая как node_load (), которая вернет список узлов по заданному типу?

Я пробовал $ nodes = node_load (array ("type" => 'student_vote')), но он возвращает только один узел.

Я знаю, что я мог бы кодировать что-то вроде node_load (), но я хотел посмотреть, может ли быть что-то подобное уже там.

35 голосов | спросил gmercer 27 J0000006Europe/Moscow 2011, 06:06:50

5 ответов


44

В зависимости от версии Drupal:

drupal 6:

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

drupal 7:

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

drupal 8:

$ nids = \ Drupal :: entityQuery ('node')
  -> условие ('тип', 'NODETYPE')
  - > выполнение ();
$ nodes = \ Drupal :: entityTypeManager ()
  - > getStorage ( 'узел')
  - > loadMultiple ($ НДИ);
ответил Nikit 27 J0000006Europe/Moscow 2011, 06:20:48
13

Нет такого 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));, но $ conditions аргумент node_load_multiple () устарел. Вместо этого вы должны использовать EntityFieldQuery для запроса идентификаторов узлов, затем используйте node_load_multiple (), но без аргумента $ condition s.

function node_load_by_type ($ type, $ limit = 15, $ offset = 0) {
  $ query = new EntityFieldQuery ();
  $ query-> entityCondition ('entity_type', 'node')
    -> entityCondition ('bundle', $ type)
    -> диапазон ($ offset, $ limit);
  $ results = $ query-> execute ();
  return node_load_multiple (array_keys ($ results ['node']));
}
ответил Pierre Buyle 27 J0000006Europe/Moscow 2011, 10:28:57
7

Уже есть несколько хороших ответов, но они берут вопрос буквально и относятся только к узлам.

Так как D6 не имеет API для выполнения того, что требуется, и нет необходимости ограничивать себя узлами в D7 и forward, я считаю, что хороший ответ должен быть сущностью.

function entity_load_by_type ($ entity_type, $ bundle, $ limit = 10, $ offset = 0) {
  $ query = new EntityFieldQuery ();
  $ query-> entityCondition ('entity_type', $ entity_type)
    -> entityCondition ('bundle', $ bundle)
    -> диапазон ($ offset, $ limit);
  $ results = $ query-> execute ();
  return entity_load ($ entity_type, array_keys ($ results [$]));
}
ответил Letharion 26 J000000Friday13 2013, 15:10:13
1

drupal 8:

$ nids = \ Drupal :: entityQuery ('node')
  -> условие ('type', 'student_vote')
  - > выполнение ();
$ nodes = \ Drupal :: entityTypeManager ()
  - > getStorage ( 'узел')
  - > loadMultiple ($ НДИ);
ответил Andrea 20 PMpWed, 20 Apr 2016 17:42:37 +030042Wednesday 2016, 17:42:37
1

Получить список узлов из типа содержимого

Drupal 6:

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

Drupal 7:

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

Drupal 8:

$ nids = \ Drupal :: entityQuery ('node')
  -> условие ('type', 'student_vote')
  - > выполнение ();
$ nodes = \ Drupal :: entityTypeManager ()
  - > getStorage ( 'узел')
  - > loadMultiple ($ НДИ);

Надеюсь, что это будет полезно.

ответил Nitesh Sethia 20 PMpWed, 20 Apr 2016 22:41:50 +030041Wednesday 2016, 22:41:50

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132