这似乎是一个容易完成的任务,所以我会从头开始(我最近实际上做了类似的任务)。
最烦人的部分似乎是避免使用 JavaScript,因为使用 JavaScript 显示用于过滤列的表单非常方便。不过,如果不需要编辑数据或在行的 onClick 事件上打开它,那是我唯一会使用 JavaScript 的地方。其他所有事情都可以使用纯 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'] 包含有效的列名,则打印表单以过滤相应的列。
您可能需要多种类型的过滤表单 - 一种用于字符串(单个文本字段),一种用于日期(最小日期,最大日期),一种用于数字(最小数字,最大数字)。您可能还需要枚举类型数据的过滤表单,即:
<select name='gender'>
<option value='m'>male</option>
<option value='f'>female</option>
</select>