Использование модуля JQuery Datatables для Drupal 7 - PullRequest
0 голосов
/ 22 марта 2011

Я новичок в Drupal и понял, как сделать мои базовые блоки и меню более мягкими. Также я выучил немного jQuery (и это здорово).

Я пытаюсь интегрировать нумерованный список пользователей, который на данный момент представляет собой отдельный скрипт PHP , в мой новый сайт Drupal 7 :

enter image description here

Я пытаюсь реализовать его как меню Drupal, чтобы я мог назвать его как http://preferans.de/top (чтобы иметь смещение нумерации страниц 0) и http://preferans.de/top/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;
}

И мой очень простой файл 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 с таблицей HTML, содержащей до 20 строк:

enter image description here

Но я понятия не имею, как использовать модуль Datatables Drupal . Я успешно загрузил и установил его и смотрю его исходный код, но не знаю, с чего начать.

Пожалуйста, помогите мне, как я могу вызвать его из функции меню?

Спасибо! Alex

1 Ответ

0 голосов
/ 22 марта 2011

Этот модуль является плагином 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 о том, как вам нужно построить свой запрос для этого.

Некоторые другие подсказки в вашем коде:

"$ Players = $ result-> fetchAll();»не нужно.Вы можете напрямую перебирать $ result.

Также вы хотите использовать theme ('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));
?>

Кроме того, вам нужно определить массив $ header, который описан в theme_table () (см. Поле и сортировкаключи в заголовке $).

...