我有一个从 MySQL 表查询的大表(包含表格数据)。每一列都是可排序的,除一列之外的所有列都是可选的(用户可以单击要显示的列),并且可以使用不同的搜索词过滤不同的列(进一步过滤掉搜索结果)。
我想知道是否已经有一种方法可以遵循创建这样的表,或者我是否必须从头开始实现它。
如果我要从头开始实现它,请给我建议。
真正的遗憾是我无法使用 JavaScript。
谢谢。
最佳答案
这似乎是一个容易做的任务,所以我会从头开始做(我最近实际上做了类似的任务)。
最令人恼火的部分似乎是避免使用 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>
关于php - 创建高度灵活的 HTML 表格时应遵循的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5308484/