Answers:
取决于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()加载每个节点ID,但这将需要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,然后使用node_load_multiple()
但不带$condition
s参数的节点ID 。
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
,但是您已经写了答案。我只想补充说,user_load_multiple()
自Drupal 7起不推荐使用的第二个参数,并且所使用的代码应为您显示的代码。
array_keys($results[$entity_type])
?
entity_load($entity_type, array_keys($results['node']));
。还没有测试它的其他实体..
从内容类型获取节点列表
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);
希望这会有所帮助。