创建高度灵活的HTML表时,最好的做法是什么?

时间:2011-03-15 07:04:02

标签: php html mysql codeigniter

我从MySQL表中查询了一个大表(带表格数据)。每列都是可排序的,除了一列之外的所有列都是可选的(用户可以单击要显示的列),并且可以使用不同的搜索项筛选不同的列(甚至可以过滤掉搜索结果)。

我想知道在创建这样一个表时是否已经有了一种方法,或者我是否必须从头开始实现它。

如果我要从头开始实施,建议我。

真实的是我无法使用JavaScript。

感谢。

2 个答案:

答案 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?

http://codeigniter.com/user_guide/libraries/table.html