3

现在,如果节点类型是文章。在术语页面的左侧,我想显示最近 10 篇文章的标题,节点类型为文章。我不想使用视图,我该怎么办?谢谢你。

如果我想在节点页面的左侧显示最新的 10 篇文章的标题,哪个节点类型是文章。如何编写查询。非常感谢。

ps:我发现EntityFieldQuery 可能可以做到这一点,但我现在不知道该怎么做。

我的代码:

$query = new EntityFieldQuery();

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

$result = $query->execute();
4

3 回答 3

8

代码可以是这样的(使用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.
}

另一个使用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));
}

性能方面:使用第一种方法。

于 2012-11-25T08:31:54.487 回答
3

我将提到另一个解决方案,因为它是否具有良好的 Drupal 知识。Views 模块只需很少的工作就可以创建这样的块。学习起来有点棘手,但它非常适合制作此类列表。

于 2012-11-25T10:55:02.610 回答
1

就 D7 性能而言,您最好使用旧db_query命令:

$result = db_query("SELECT nid FROM {node} WHERE type = :type AND status = 1 ORDER BY created DESC LIMIT 10", array(':type' => $type));
foreach ($result as $record) {
  // Do something with each $record
  $node = node_load($record->nid);
}

有关速度比较,db_querydb_select查看此处:https ://www.drupal.org/node/1067802#comment-8996571

对于简单查询,db_query() 比 db_select() 快 22%

对于简单查询,db_query() 比 EFQ 快 124%

对于有两个连接的查询,db_query() 比 db_select() 快 29%

这是因为 db_select 和 EntityFieldQuery() 允许模块挂钩并修改查询。这对你来说可能是件好事!

我只是提供选项。

于 2016-09-12T10:03:58.047 回答