2011-03-22 97 views
0

我是Drupal的新手,並且已經理解如何讓我的基本塊和菜單變得非常流暢。另外我學習了一些jQuery(它很棒)。對於Drupal 7使用jQuery Datatables模塊

我想用戶的分頁列表,它只是a separate PHP script此刻融入my new Drupal 7 site

enter image description here

我想實現它作爲一個Drupal的菜單,讓我可以這樣稱呼它http://preferans.de/tophttp://preferans.de/top/100(已分頁的偏移量爲0)(顯示的用戶開始與100用戶列表):

function pref_menu() { 
    $items['top'] = array(
    'title' => 'Weekly player rating', 
    'description' => 'Weekly player rating', 
    'page callback' => 'pref_top_callback', 
    'access callback' => TRUE, 
    'file' => 'pref.top.inc', 
    'file path' => drupal_get_path('module', 'pref'), 
    'type' => MENU_CALLBACK, 
); 

    return $items; 
} 

而且我非常SIMPL Ëpref.top.inc文件是:

function pref_top_callback($offset = 0) { 
    return array(
    'pref_players_table' => array(
     '#type' => 'markup', 
     '#markup' => pref_players_table($offset), 
    ), 
); 
} 

function pref_fetch_players($offset) { 
    /* FETCH MAX 20 RECORDS INTO AN ARRAY */ 
    $players = array(); 
    $result = db_query(" 
select u.id, 
     u.first_name, 
     row_number() OVER (order by m.money desc) as pos, 
     u.female, 
     u.city, 
     u.avatar, 
     m.money, 
     u.login > u.logout as online 
from pref_users u, pref_money m where 
     m.yw=to_char(current_timestamp, 'IYYY-IW') and 
     u.id=m.id 
order by m.money desc 
limit 20 offset :offset 
", array(':offset' => array($offset)), 
    array('fetch' => PDO::FETCH_ASSOC) 
); 
    $players = $result->fetchAll(); 

    /* PRINT THE ARRAY AS AN HMTL-TABLE */ 
    $table = '<table>'; 
    foreach ($players as $user) { 
    $table .= '<tr>'; 
    $table .= sprintf('<td>%u</td> 
<td><a href="/user.php?id=%s">%s</a></td> 
<td>%s</td><td>%d $</td>', 
     $user['pos'], 
     $user['id'], 
     $user['first_name'], 
     $user['city'], 
     $user['money']); 
    $table .= '</tr>'; 
    } 

    $table .= '</table>'; 
    return $table; 
} 

這並不工作,我得到一個Drupal頁面含有多達20行的HTML表:

enter image description here

但我不知道怎麼樣使用the Datatables Drupal module。我已經成功下載並安裝了它,並正在查看它的源代碼,但不知道從哪裏開始。

請幫助我,我怎麼能從我的菜單功能調用它?

謝謝! Alex

回答

0

該模塊是一個Views插件,您需要將您的表暴露給視圖才能使用它。

根據你的需要,你也可以得到一個只有Drupal核心的可排序的多頁表格,請參閱https://drupal.stackexchange.com/questions/364/how-do-you-make-sortable-tables-with-a-pager-with-data-from-a-custom-table/367#367瞭解如何構建查詢。

在你的代碼的一些其他提示:

「$球員= $ result->使用fetchall();」是不必要的。您可以直接遍歷$ result。

此外,你想使用主題('表')。然後,你只需要在這您的foreach鉤:

<?php 
$rows = array(); 
$header = array(t('Position'), t('Id'), t('First name'), t('City'), t('Money')); 
foreach ($result as $player) { 
    $rows[] = array($player['pos'], $player['id'], $player['first_name'], $player['city'], $player['money']); 
} 
return theme('table', array('rows' => $rows, 'header' => $header)); 
?> 

此外,您將需要定義$頭陣,即在theme_table()描述(參見字段和排序在$標題密鑰)。

+0

對不起,但我不明白你的代碼:你填充$ rows數組,但你通過/返回它? $ header是什麼,可以設置爲$ header = array('pos','id','first_name','city','money'); ? – 2011-03-23 14:04:16

+0

我也試過:$ header = array('pos','id','first_name','city','money'); $ rows = array(); foreach($ player爲$ player){ $ rows [] = array($ player ['pos'],$ player ['id'],$ player ['first_name'],$ player ['city'], $播放器[ '錢']); } return theme('table',$ header,$ rows); 但得到一個沒有桌子的白色屏幕 – 2011-03-23 14:09:16

+0

對不起,我有一個錯字。顯然,你需要將$行傳遞給'行'。我修正了它,併爲$ header添加了一個示例。請注意,當您要使用TableSort時,您需要擴展$ header,請參閱http://api.drupal.org/api/drupal/modules--dblog--dblog.admin。inc/function/dblog_overview/7爲例。 – Berdir 2011-03-23 17:08:55