7 node.module node_load_multiple($nids = array(), $conditions = array(), $reset = FALSE)
8 node.module node_load_multiple(array $nids = NULL, $reset = FALSE)

Loads node entities from the database.

This function should be used whenever you need to load more than one node from the database. Nodes are loaded into memory and will not require database access if loaded again during the same page request.

@todo Remove $conditions in Drupal 8.


$nids: An array of node IDs.

$conditions: (deprecated) An associative array of conditions on the {node} table, where the keys are the database fields and the values are the values those fields must have. Instead, it is preferable to use EntityFieldQuery to retrieve a list of entity IDs loadable by this function.

$reset: Whether to reset the internal node_load cache.

Return value

An array of node objects indexed by nid.

See also



14 calls to node_load_multiple()
blog_page_last in modules/blog/blog.pages.inc
Menu callback; displays a Drupal page containing recent blog entries of all users.
blog_page_user in modules/blog/blog.pages.inc
Menu callback; displays a Drupal page containing recent blog entries of a given user.
DrupalWebTestCase::drupalGetNodeByTitle in modules/simpletest/drupal_web_test_case.php
Get a node from the database based on its title.
NodeLoadHooksTestCase::testHookNodeLoad in modules/node/node.test
Test that hook_node_load() is invoked correctly.
NodeLoadMultipleTestCase::testNodeMultipleLoad in modules/node/node.test
Create four nodes and ensure they're loaded correctly.

... See full list


modules/node/node.module, line 946
The core that allows content to be submitted to the site. Modules and scripts may programmatically submit nodes using the usual form API pattern.


function node_load_multiple($nids = array(), $conditions = array(), $reset = FALSE) {
  return entity_load('node', $nids, $conditions, $reset);


The number of nodes that can be loaded into memory in a single query is limited by the PDO layer, the database driver, configuration details, and of course, available memory. Passing too large an argument array to this function can result in the cryptic error message General error: 1 too many SQL variables.

A documentation bug has been posted to note the limited argument length.

This example below uses a content type called "Product Type" (machine name "product_type", which is found on the content->content types page in drupal 7) and will return all the nodes of the product type. These are return as an array of objects which you will access accordingly. My example I run a foreach which turns $products into an object and I print out the nid and title.

= "product_type";
$nodes = node_load_multiple(array(), array('type' => $type));
$nodes as $products):

<?php print $products->nid; ?>
<?php print $products->title; ?>
<?php endforeach; ?>

this is one of many reasons why we have removed php as our templating engine.

This is very helpful code ..:)

frob meant that using PHP code in templates is a bad practice.

First part should be in template.php or in theme-functions custom module:

// Very simple example:
function THEME_preprocess_page(&$vars) {
$nodes = node_load_multiple(NULL, array('type' => "product_type"));
  foreach (
$nodes as $nid => $node) {
$vars['escaped_node_list'] .= l(check_plain($node->title), 'node/' . $node->nid);

Second part should be in tempate (.tpl.php):

print $escaped_node_list;

I built a checkbox form my goal is to load the objects so the form displays each. I can load 1 node and everything works, but when I add multiple it doesn't generate each as I need