web-dev-qa-db-ja.com

タイプ別にノードのリストを取得するDrupal API関数はありますか?

指定されたタイプのノードのリストを返すDrupal node_load()のようなAPI関数はありますか?

私は$nodes = node_load(array("type" => 'student_vote'))を試しましたが、1つのノードしか返しません。

node_load()のようなものをコード化できることはわかっていますが、そのようなものがすでに存在するかどうかを確認したかったのです。

37
gmercer

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')
  ->condition('type', 'NODETYPE')
  ->execute();
$nodes = \Drupal::entityTypeManager()
  ->getStorage('node')
  ->loadMultiple($nids);
47
Nikit

Drupal 6.にはそのようなAPIはありません。6。コンテンツタイプのすべてのノードIDを適切にクエリし、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));を使用できますが、 node_load_multiple() の_$conditions_引数は代わりに、 EntityFieldQuery を使用してノードIDを照会してから、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)
    ->range($offset, $limit);
  $results = $query->execute();
  return node_load_multiple(array_keys($results['node']));
}
_
13
Pierre Buyle

すでにいくつかの良い答えがありますが、彼らは質問を文字通り受け取り、ノードのみを参照します。

D6には、要求されていることを実行するためのAPIがなく、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

コンテンツタイプからノードのリストを取得します

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')
  ->condition('type', 'student_vote')
  ->execute();
$nodes = \Drupal::entityTypeManager()
  ->getStorage('node')
  ->loadMultiple($nids);

これがお役に立てば幸いです。

1
Nitesh Sethia

drupal 8:

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