德鲁巴。获取模板中过滤的节点
Drupal. Get filtered nodes in template
在 Drupal 7 中,如何在页面模板中获取基于特定过滤器的节点列表?例如,页面--popular.tpl.php
例如,获取内容类型为 'article' 和分类名称为 'news' 的最新 4 个节点?
我知道 'views' 大多数人都这样做,但我不能这样做是有原因的。
如果有人能提供帮助,我们将不胜感激!
页面模板包含区域,特别是已经呈现的 content
区域。所以,我想,你的问题必须正确表述如下:"How can I make a custom page containing list of nodes, without using Views"。为此,您需要在模块中实现 hook_menu
:
/**
* Implements hook_menu().
*/
function mymodule_menu() {
$items = array();
$items['popular'] = array(
'title' => 'Popular articles',
'page callback' => '_mymodule_page_callback_popular',
'access arguments' => array('access content'),
'type' => MENU_CALLBACK,
);
return $items;
}
/**
* Page callback for /popular page.
*/
function _mymodule_page_callback_popular() {
$news_tid = 1; // This may be also taken from the URL or page arguments.
$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'node')
->entityCondition('bundle', 'article')
->propertyCondition('status', NODE_PUBLISHED)
->fieldCondition('field_taxonomy', 'tid', $news_tid) // Use your field name
->propertyOrderBy('created', 'DESC')
->range(0, 4);
$result = $query->execute();
if (isset($result['node'])) {
$node_nids = array_keys($result['node']);
$nodes = entity_load('node', $node_nids);
// Now do what you want with loaded nodes. For example, show list of nodes
// using node_view_multiple().
}
}
在 Drupal 7 中,如何在页面模板中获取基于特定过滤器的节点列表?例如,页面--popular.tpl.php
例如,获取内容类型为 'article' 和分类名称为 'news' 的最新 4 个节点?
我知道 'views' 大多数人都这样做,但我不能这样做是有原因的。
如果有人能提供帮助,我们将不胜感激!
页面模板包含区域,特别是已经呈现的 content
区域。所以,我想,你的问题必须正确表述如下:"How can I make a custom page containing list of nodes, without using Views"。为此,您需要在模块中实现 hook_menu
:
/**
* Implements hook_menu().
*/
function mymodule_menu() {
$items = array();
$items['popular'] = array(
'title' => 'Popular articles',
'page callback' => '_mymodule_page_callback_popular',
'access arguments' => array('access content'),
'type' => MENU_CALLBACK,
);
return $items;
}
/**
* Page callback for /popular page.
*/
function _mymodule_page_callback_popular() {
$news_tid = 1; // This may be also taken from the URL or page arguments.
$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'node')
->entityCondition('bundle', 'article')
->propertyCondition('status', NODE_PUBLISHED)
->fieldCondition('field_taxonomy', 'tid', $news_tid) // Use your field name
->propertyOrderBy('created', 'DESC')
->range(0, 4);
$result = $query->execute();
if (isset($result['node'])) {
$node_nids = array_keys($result['node']);
$nodes = entity_load('node', $node_nids);
// Now do what you want with loaded nodes. For example, show list of nodes
// using node_view_multiple().
}
}