回答:
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);
Drupal 6にはそのようなAPIはありません。最も近い方法は、コンテンツタイプのすべてのノード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));
が、の$conditions
引数node_load_multiple()
は非推奨です。代わりに、EntityFieldQueryを使用してノードIDを照会し、s引数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']));
}
すでにいくつかの良い答えがありますが、それらは文字通り質問を受け取り、ノードのみを参照します。
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[$]));
}
EntityFieldQuery
が、あなたはすでにあなたのものを書いています。の2番目の引数はuser_load_multiple()
Drupal 7から非推奨になり、使用されたコードは表示されているはずです。
array_keys($results[$entity_type])
ですか?
entity_load($entity_type, array_keys($results['node']));
。Haventは他のエンティティに対してテストしました。
コンテンツタイプからノードのリストを取得する
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);
これが役立つことを願っています。