php实现datagrid
使用 PHP 实现 DataGrid
DataGrid 是一种用于展示和操作表格数据的组件。以下是几种常见的实现方法:
使用原生 PHP 和 HTML 表格
通过 PHP 数组和 HTML 表格可以快速实现一个简单的 DataGrid:
<?php
$data = [
['id' => 1, 'name' => 'John', 'email' => 'john@example.com'],
['id' => 2, 'name' => 'Jane', 'email' => 'jane@example.com']
];
echo '<table border="1">';
echo '<tr><th>ID</th><th>Name</th><th>Email</th></tr>';
foreach ($data as $row) {
echo '<tr>';
echo '<td>' . htmlspecialchars($row['id']) . '</td>';
echo '<td>' . htmlspecialchars($row['name']) . '</td>';
echo '<td>' . htmlspecialchars($row['email']) . '</td>';
echo '</tr>';
}
echo '</table>';
?>
使用 jQuery DataTables 插件
结合 PHP 后端和 jQuery DataTables 前端插件可以实现功能丰富的 DataGrid:
后端 PHP (data.php):
<?php
header('Content-Type: application/json');
$data = [
['id' => 1, 'name' => 'John', 'email' => 'john@example.com'],
['id' => 2, 'name' => 'Jane', 'email' => 'jane@example.com']
];
echo json_encode(['data' => $data]);
?>
前端 HTML:
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.25/css/jquery.dataTables.css">
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="https://cdn.datatables.net/1.10.25/js/jquery.dataTables.js"></script>
<table id="dataGrid" class="display">
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>Email</th>
</tr>
</thead>
</table>
<script>
$(document).ready(function() {
$('#dataGrid').DataTable({
"ajax": "data.php",
"columns": [
{ "data": "id" },
{ "data": "name" },
{ "data": "email" }
]
});
});
</script>
使用 PHP 框架组件
许多 PHP 框架提供了内置的 DataGrid 组件:
Laravel 示例 (使用 Laravel Collective):
use Collective\Html\HtmlFacade as HTML;
{!! HTML::table(['id', 'name', 'email'], $data) !!}
Symfony 示例 (使用 Symfony UX):
{{ grid_render('App\\Grid\\UserGrid') }}
数据库驱动的 DataGrid
从数据库获取数据并显示:
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
$stmt = $pdo->query('SELECT id, name, email FROM users');
echo '<table border="1">';
echo '<tr><th>ID</th><th>Name</th><th>Email</th></tr>';
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo '<tr>';
echo '<td>' . htmlspecialchars($row['id']) . '</td>';
echo '<td>' . htmlspecialchars($row['name']) . '</td>';
echo '<td>' . htmlspecialchars($row['email']) . '</td>';
echo '</tr>';
}
echo '</table>';
?>
添加分页功能
实现基本的分页功能:
<?php
$perPage = 5;
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$offset = ($page - 1) * $perPage;
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
$total = $pdo->query('SELECT COUNT(*) FROM users')->fetchColumn();
$stmt = $pdo->query("SELECT id, name, email FROM users LIMIT $offset, $perPage");
// 显示表格
echo '<table border="1">';
echo '<tr><th>ID</th><th>Name</th><th>Email</th></tr>';
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo '<tr>';
echo '<td>' . htmlspecialchars($row['id']) . '</td>';
echo '<td>' . htmlspecialchars($row['name']) . '</td>';
echo '<td>' . htmlspecialchars($row['email']) . '</td>';
echo '</tr>';
}
echo '</table>';
// 显示分页链接
$totalPages = ceil($total / $perPage);
for ($i = 1; $i <= $totalPages; $i++) {
echo "<a href='?page=$i'>$i</a> ";
}
?>
以上方法提供了从简单到复杂的 DataGrid 实现方案,可以根据项目需求选择合适的实现方式。







