我从MySQL表中查询了一个大表(带表格数据)。每列都是可排序的,除了一列之外的所有列都是可选的(用户可以单击要显示的列),并且可以使用不同的搜索项筛选不同的列(甚至可以过滤掉搜索结果)。
我想知道在创建这样一个表时是否已经有了一种方法,或者我是否必须从头开始实现它。
如果我要从头开始实施,建议我。
真实的是我无法使用JavaScript。
感谢。
答案 0 :(得分:1)
这似乎是一项易于完成的任务,所以我会从头开始(最近我做了类似的任务)。
最令人恼火的部分似乎是避免使用JavaScript,因为显示使用JavaScript过滤列的表单非常方便。虽然,这是我唯一使用JavaScript的地方,但是如果不需要编辑数据或在行的onClick事件上打开数据。使用纯HTML / PHP / SQL可以轻松完成所有其他事情。
生成网址可能很方便的功能:
/**
* 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'))
。
要显示过滤列的表单,您可以使用网址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>
答案 1 :(得分:1)
由于您似乎正在使用CodeIgniter,您是否检查过Table Class?