Это, кажется, простая задача, поэтому я бы сделал ее с нуля (на самом деле я недавно делал похожую задачу).
Кажется, что самая раздражающая часть - избегать JavaScript, так какочень удобно показывать формы для фильтрации столбцов с помощью JavaScript.Хотя это единственное место, где я бы использовал JavaScript, если не нужно редактировать данные или открывать их в событии onClick строки.Все остальные вещи можно легко сделать с помощью простого HTML / PHP / SQL.
Функция, которая может быть полезна для генерации URL:
/**
* Returns URL with modifications based on $params.
*
* To remove parameter from URL, specify NULL as it's value.
*
* @param array $params
* @param bool $leaveUnescaped
*/
function modifyURL(array $params = null, $leaveUnescaped = false) {
$url = '?' . http_build_query(array_merge($_GET, (array)$params));
if ( !$leaveUnescaped ) {
$url = html($url);
}
return $url;
}
Возможное использование:
<tr>
<th><a href='<?php echo modifyURL(array('sort_field' => 'id')); ?>'>ID</a></th>
<th><a href='<?php echo modifyURL(array('sort_field' => 'name')); ?>'>Name</a></th>
</tr>
Это также хорошо для создания пагинационных ссылок, т. Е. modifyURL(array('page' => $page))
или просто modifyURL(compact('page'))
в цикле.
Для отображения формы для фильтрации столбцов вы можете использовать URL modifyURL(array('filter_column' => 'name'))
.При создании таблицы проверьте, является ли isset($_GET['filter_column'])
истиной.Если да и если $_GET['filter_column']
содержит правильное имя столбца, распечатайте форму для фильтрации соответствующего столбца.
Возможно, вам понадобится несколько типов форм фильтрации - один для строк (одно текстовое поле), другой для дат (минимальная дата, максимальная дата), одна для чисел (минимальное число, максимальное количество).Вам также может понадобиться форма фильтрации для данных типа enum, например:
<select name='gender'>
<option value='m'>male</option>
<option value='f'>female</option>
</select>