Search code examples
phpdrupaldrupal-7

Get the latest 10 articles on a specified node type?


now, if the node type is article. on the term page's left, i want to show the latest 10 articles's title which node type is article. i don't want to use views, how do i do? thank you.

if i want to show the latest 10 articles's title which node type is article on the node page's left . how to write the query. many thanks.

ps:i found EntityFieldQuery maybe can do this, but i don't now how to do out put it.

my code:

$query = new EntityFieldQuery();

$query
 ->entityCondition('entity_type', 'node')
 ->entityCondition('bundle', 'article')
 ->propertyCondition('status', 1)
 ->propertyOrderBy('created', 'DESC')
  ->range(0, 10);

$result = $query->execute();

Solution

  • The code can be something like that (using db_select())

    $query = db_select("node", "n") // select from the node table
        ->fields("n", array("nid", "title")) // fields nid, title
        ->condition("type", "page", "=") // where the node type = page
        ->orderBy("created", "DESC") // order by the newest
        ->range(0, 10) // select only 10 records
        ->execute(); // execute the query
    
    while($record = $query->fetchAssoc()) {
        print(l($record['title'], "node/" . $record['nid'])); // print the node title linked to node.
    }
    

    Another example using EntityFieldQuery():

    $query = new EntityFieldQuery();
    $entities = $query->entityCondition('entity_type', 'node')          
          ->entityCondition('bundle', 'club')
          ->propertyOrderBy("created", "DESC")
          ->range(0, 10)
          ->execute();
    
    foreach($entities['node'] as $obj)
    {
        $node = node_load($obj->nid);
        print(l($node->title, "node/" . $node->nid));
    }
    

    Performance wise: use the first method.