2016-05-03 7 views
0

in Drupal 7, wie kann ich eine Liste von Knoten basierend auf einem bestimmten Filter in einer Seitenvorlage erhalten? zum Beispiel page - popular.tpl.phpDrupal. Erhalten Sie gefilterte Knoten in der Vorlage

zum Beispiel, die neuesten 4 Knoten mit Inhaltstyp 'Artikel' und Taxonomie Name 'Nachrichten' bekommen?

Ich weiß, die meisten Leute tun dies in "Ansichten", aber es gibt Gründe, dass ich das nicht tun kann.

Schätzen Sie, wenn jemand helfen kann!

+0

Erklären Sie Ihre "Gründe". –

Antwort

2

Seitenvorlagen enthalten Regionen, insbesondere bereits gerenderte content Region. Ich vermute also, dass Ihre Frage wie folgt richtig formuliert sein muss: "Wie kann ich eine benutzerdefinierte Seite erstellen, die eine Liste von Knoten enthält, ohne Ansichten zu verwenden". Um dies zu tun, müssen Sie hook_menu in Ihrem Modul implementieren:

/** 
* 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(). 
    } 
} 

Werfen Sie einen Blick auf hook_menu und How to use EntityFieldQuery.