Відповіді:
Ви можете запитувати цю інформацію безпосередньо через node_load_multiple()
$nodes = node_load_multiple(array(), array('type' => 'my_type'));
Ви можете додати до $conditions
масиву (другий аргумент) стільки умов властивостей, скільки вам подобається, тому статус, створений тощо є також чесною грою.
$conditions
технічно застаріла (я думаю, на користь EntityFieldQuery
), але шанси на те, що функціонал коли-небудь буде видалений з Drupal 7, в основному немає. Це занадто зламається.
EntityFieldQuery
до кінця :) Я вважаю, що це більше для нащадків, ніж все інше
Drupal core забезпечує клас під назвою EntityFieldQuery()
. Існує також зручна сторінка документа для її використання, на якій є багато прикладів. У своєму найпростішому вигляді:
$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'node')
->entityCondition('bundle', 'page')
->propertyCondition('status', 1);
$result = $query->execute();
if (!empty($result['node'])) {
$nids = array_keys($result['node']);
$nodes = node_load_multiple($nids);
foreach ($nodes as $node) {
// do something awesome
}
}
Це завантажить усі опубліковані вузли типу "сторінка". Вам потрібно періодично коригувати це
$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'node')
->entityCondition('bundle', 'page')
->propertyCondition('status', 1);
$result = $query->execute();
if (!empty($result['node'])) {
$nids = array_keys($result['node']);
foreach ($nids as $nid) {
$node = node_load($nid, NULL, TRUE);
// do something awesome
}
}
щоб не завантажувати занадто багато одразу, що може спричинити проблеми з пам'яттю.