Respostas:
Você pode consultar essas informações diretamente através node_load_multiple()
$nodes = node_load_multiple(array(), array('type' => 'my_type'));
Você pode adicionar tantas condições de propriedade à $conditions
matriz (segundo argumento) quanto desejar, para que status, criado, etc. também sejam um jogo justo.
$conditions
é tecnicamente reprovado (imagino a favor de EntityFieldQuery
), mas as chances dessa funcionalidade ser removida do Drupal 7 são basicamente inexistentes. Isso iria quebrar demais.
EntityFieldQuery
todo o caminho :) Eu coloquei isso é mais para a posteridade que qualquer outra coisa
O núcleo Drupal fornece uma classe chamada EntityFieldQuery()
. Há também uma página de documento útil para usá-lo, com muitos exemplos. Na sua forma mais simples:
$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
}
}
Isso carregará todos os nós publicados do tipo "página". Periodicamente, é necessário ajustar isso para
$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
}
}
para evitar carregar muito de uma só vez, o que pode causar problemas de memória.