3

ここで、ノード タイプが article の場合。用語ページの左側に、どのノードタイプが記事であるかの最新の 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の優れた知識であれば、もう1つの解決策について説明します。ビューモジュールは、ほとんど作業を行わずにこのようなブロックを作成できます。学ぶのは少し難しいですが、それはこれらの種類のリストを作成するためのものです。

于 2012-11-25T10:55:02.610 に答える
1

db_queryD7 のパフォーマンスに関しては、古いコマンドを使用した方がよいでしょう。

$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% 高速です

2 つの結合を持つクエリの場合、db_query() は db_select() よりも 29% 高速です

これは、db_select と EntityFieldQuery() を使用すると、モジュールをフックしてクエリを変更できるためです。これはあなたにとって良いことかもしれません!

私はオプションを提供しているだけです。

于 2016-09-12T10:03:58.047 に答える