2011-03-22 4 views
0

저는 Drupal 초보자이며 내 기본 블록과 메뉴를 아주 작게 만드는 방법을 알고 있습니다. 또한 jQuery 몇 가지를 배웠습니다. (그리고 그것은 굉장합니다). Drupal 7의 jQuery Datatables 모듈 사용

나는 my new Drupal 7 site에 불과 a separate PHP script 순간이다 사용자의 페이지가 매겨진 목록을 통합하기 위해 노력하고있어 :

enter image description here

가 나는 드루팔 메뉴로 구현하기 위해 노력하고있어, 그래서 내가 할 수있는

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; 
} 

그리고 내 매우 간결체 한자 : http://preferans.de/top과 같이 호출합니다 (100 번째 사용자로 시작하는 사용자의 목록을 표시) 및 http://preferans.de/top/100 (매김 0의 오프셋을 가지고) 전자 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; 
} 

이 수행 작업, 나는 HTML 테이블 20 행까지 포함와 드루팔 페이지를 얻을 :

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을 참조하십시오. 코드에

다른 어떤 힌트 :

"$ 선수 = $에서 그 결과> fetchAll();" 필요하지 않습니다. $ result를 직접 반복 할 수 있습니다.

또한 테마 ('table')를 사용하려고합니다. 그렇다면, 당신은 당신의 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 = array ('pos', 'id', 'first_name', 'city', 'money')로 설정할 수 있습니까? ? –

+0

나는 또한 시도했다 : $ header = array ('pos', 'id', 'first_name', 'city', 'money'); $ rows = array(); foreach ($ players as $ players) { $ 행 [] = 배열 ​​($ player [ 'pos'], $ 플레이어 [ 'id'], $ 플레이어 [ 'first_name'], $ 플레이어 [ 'city'], $ player [ 'money']); } 반환 테마 ('table', $ header, $ rows); 테이블이없는 흰색 화면이 표시됩니다. –

+0

죄송합니다. 거기에 오타가있었습니다. 분명히 $ rows를 'rows'에 전달해야합니다. 나는 그것을 고치고 또한 $ header에 대한 예제를 추가했다. TableSort를 사용하려면 $ header를 확장해야합니다 (http://api.drupal.org/api/drupal/modules--dblog--dblog.admin 참조).inc/function/dblog_overview/7을 참조하십시오. – Berdir