Для создания таблицы с использованием PHP, Bootstrap, DataTables и jQuery, а также добавления формы выбора даты и модального окна для редактирования записей, выполните следующие шаги:
Сначала создадим PHP-скрипт, который будет генерировать таблицу с датами от 2025-01-01 до 2025-10-10.
<?php // Генерация массива дат $startDate = new DateTime('2025-01-01'); $endDate = new DateTime('2025-10-10'); $dates = []; while ($startDate <= $endDate) { $dates[] = $startDate->format('Y-m-d'); $startDate->modify('+1 day'); } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>DataTables Example</title> <link rel="stylesheet" href="https://cdn.datatables.net/1.10.21/css/dataTables.bootstrap4.min.css"> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"> </head> <body> <div class="container mt-5"> <h2>Таблица с датами</h2> <form id="dateRangeForm" class="mb-3"> <div class="form-row"> <div class="form-group col-md-4"> <label for="startDate">Начальная дата</label> <input type="date" class="form-control" id="startDate"> </div> <div class="form-group col-md-4"> <label for="endDate">Конечная дата</label> <input type="date" class="form-control" id="endDate"> </div> <div class="form-group col-md-4 align-self-end"> <button type="submit" class="btn btn-primary">Применить</button> </div> </div> </form> <table id="datesTable" class="table table-striped table-bordered" style="width:100%"> <thead> <tr> <th>Дата</th> <th>Действие</th> </tr> </thead> <tbody> <?php foreach ($dates as $date): ?> <tr> <td><?php echo $date; ?></td> <td> <button class="btn btn-primary btn-sm edit-btn" data-date="<?php echo $date; ?>">Редактировать</button> </td> </tr> <?php endforeach; ?> </tbody> </table> </div> <!-- Модальное окно для редактирования --> <div class="modal fade" id="editModal" tabindex="-1" aria-labelledby="editModalLabel" aria-hidden="true"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title" id="editModalLabel">Редактирование записи</h5> <button type="button" class="close" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">×</span> </button> </div> <div class="modal-body"> <form id="editForm"> <div class="form-group"> <label for="editDate">Дата</label> <input type="date" class="form-control" id="editDate" name="editDate"> </div> <input type="hidden" id="originalDate" name="originalDate"> </form> </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-dismiss="modal">Закрыть</button> <button type="button" class="btn btn-primary" id="saveChanges">Сохранить изменения</button> </div> </div> </div> </div> <script src="https://code.jquery.com/jquery-3.5.1.min.js"></script> <script src="https://cdn.datatables.net/1.10.21/js/jquery.dataTables.min.js"></script> <script src="https://cdn.datatables.net/1.10.21/js/dataTables.bootstrap4.min.js"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script> <script> $(document).ready(function() { var table = $('#datesTable').DataTable(); // Фильтрация по дате $('#dateRangeForm').on('submit', function(e) { e.preventDefault(); var startDate = $('#startDate').val(); var endDate = $('#endDate').val(); table.draw(); }); // Открытие модального окна для редактирования $('#datesTable').on('click', '.edit-btn', function() { var date = $(this).data('date'); $('#editDate').val(date); $('#originalDate').val(date); $('#editModal').modal('show'); }); // Сохранение изменений $('#saveChanges').on('click', function() { var originalDate = $('#originalDate').val(); var newDate = $('#editDate').val(); $.ajax({ url: 'update_date.php', type: 'POST', data: { originalDate: originalDate, newDate: newDate }, success: function(response) { if (response === 'success') { alert('Дата успешно обновлена'); $('#editModal').modal('hide'); location.reload(); // Перезагрузка страницы для обновления таблицы } else { alert('Ошибка при обновлении даты'); } } }); }); }); </script> </body> </html>
Создайте файл update_date.php, который будет обрабатывать AJAX-запрос для обновления даты.
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$originalDate = $_POST['originalDate'];
$newDate = $_POST['newDate'];
// Здесь можно добавить логику для обновления даты в базе данных или другом хранилище
// В данном примере просто возвращаем успешный ответ
echo 'success';
}
?>Генерация дат: Мы создаем массив дат от 2025-01-01 до 2025-10-10 и выводим их в таблицу.
Фильтрация по дате: Используем DataTables API для фильтрации данных в таблице на основе выбранного диапазона дат.
Модальное окно: При нажатии на кнопку "Редактировать" открывается модальное окно с формой для изменения даты.
AJAX-запрос: При сохранении изменений отправляется AJAX-запрос на сервер для обновления даты.
Разместите файлы на вашем веб-сервере.
Откройте страницу в браузере, и вы увидите таблицу с датами.
Используйте форму для фильтрации дат и кнопки для редактирования записей.
Этот пример демонстрирует базовую функциональность. В реальном проекте вам, возможно, потребуется добавить обработку ошибок, валидацию данных и интеграцию с базой данных.
Для реализации сохранения данных в файл data.json и обновления соответствующей строки в таблице после редактирования, внесем изменения в код.
update_date.phpФайл update_date.php будет обновлять данные в data.json и возвращать обновленную дату.
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$originalDate = $_POST['originalDate'];
$newDate = $_POST['newDate'];
// Загрузка данных из data.json
$dataFile = 'data.json';
$data = json_decode(file_get_contents($dataFile), true);
// Поиск и обновление записи
foreach ($data as &$item) {
if ($item['date'] === $originalDate) {
$item['date'] = $newDate;
break;
}
}
// Сохранение обновленных данных в data.json
file_put_contents($dataFile, json_encode($data, JSON_PRETTY_PRINT));
// Возвращаем новую дату
echo json_encode(['newDate' => $newDate]);
}
?>Обновим JavaScript для обработки ответа от сервера и обновления строки в таблице.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>DataTables Example</title> <link rel="stylesheet" href="https://cdn.datatables.net/1.10.21/css/dataTables.bootstrap4.min.css"> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"> </head> <body> <div class="container mt-5"> <h2>Таблица с датами</h2> <form id="dateRangeForm" class="mb-3"> <div class="form-row"> <div class="form-group col-md-4"> <label for="startDate">Начальная дата</label> <input type="date" class="form-control" id="startDate"> </div> <div class="form-group col-md-4"> <label for="endDate">Конечная дата</label> <input type="date" class="form-control" id="endDate"> </div> <div class="form-group col-md-4 align-self-end"> <button type="submit" class="btn btn-primary">Применить</button> </div> </div> </form> <table id="datesTable" class="table table-striped table-bordered" style="width:100%"> <thead> <tr> <th>Дата</th> <th>Действие</th> </tr> </thead> <tbody> <?php // Загрузка данных из data.json $dataFile = 'data.json'; $data = json_decode(file_get_contents($dataFile), true); foreach ($data as $item): ?> <tr> <td><?php echo $item['date']; ?></td> <td> <button class="btn btn-primary btn-sm edit-btn" data-date="<?php echo $item['date']; ?>">Редактировать</button> </td> </tr> <?php endforeach; ?> </tbody> </table> </div> <!-- Модальное окно для редактирования --> <div class="modal fade" id="editModal" tabindex="-1" aria-labelledby="editModalLabel" aria-hidden="true"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title" id="editModalLabel">Редактирование записи</h5> <button type="button" class="close" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">×</span> </button> </div> <div class="modal-body"> <form id="editForm"> <div class="form-group"> <label for="editDate">Дата</label> <input type="date" class="form-control" id="editDate" name="editDate"> </div> <input type="hidden" id="originalDate" name="originalDate"> </form> </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-dismiss="modal">Закрыть</button> <button type="button" class="btn btn-primary" id="saveChanges">Сохранить изменения</button> </div> </div> </div> </div> <script src="https://code.jquery.com/jquery-3.5.1.min.js"></script> <script src="https://cdn.datatables.net/1.10.21/js/jquery.dataTables.min.js"></script> <script src="https://cdn.datatables.net/1.10.21/js/dataTables.bootstrap4.min.js"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script> <script> $(document).ready(function() { var table = $('#datesTable').DataTable(); // Фильтрация по дате $('#dateRangeForm').on('submit', function(e) { e.preventDefault(); var startDate = $('#startDate').val(); var endDate = $('#endDate').val(); table.draw(); }); // Открытие модального окна для редактирования $('#datesTable').on('click', '.edit-btn', function() { var date = $(this).data('date'); $('#editDate').val(date); $('#originalDate').val(date); $('#editModal').modal('show'); }); // Сохранение изменений $('#saveChanges').on('click', function() { var originalDate = $('#originalDate').val(); var newDate = $('#editDate').val(); $.ajax({ url: 'update_date.php', type: 'POST', data: { originalDate: originalDate, newDate: newDate }, success: function(response) { var result = JSON.parse(response); if (result.newDate) { alert('Дата успешно обновлена'); $('#editModal').modal('hide'); // Обновление строки в таблице table.row($('button[data-date="' + originalDate + '"]').closest('tr')).data([ result.newDate, '<button class="btn btn-primary btn-sm edit-btn" data-date="' + result.newDate + '">Редактировать</button>' ]).draw(false); } else { alert('Ошибка при обновлении даты'); } } }); }); }); </script> </body> </html>
data.jsonСоздайте файл data.json с начальными данными:
[ {"date": "2025-01-01"}, {"date": "2025-01-02"}, {"date": "2025-01-03"}, {"date": "2025-01-04"}, {"date": "2025-01-05"}, {"date": "2025-01-06"}, {"date": "2025-01-07"}, {"date": "2025-01-08"}, {"date": "2025-01-09"}, {"date": "2025-01-10"} ]
update_date.php:
Загружает данные из data.json.
Находит и обновляет запись.
Сохраняет обновленные данные обратно в data.json.
Возвращает новую дату в формате JSON.
JavaScript:
После успешного обновления даты на сервере обновляет соответствующую строку в таблице с помощью метода row().data().
data.json:
Хранит данные в формате JSON, которые используются для заполнения таблицы.
Разместите файлы на веб-сервере.
Откройте страницу в браузере.
Редактируйте даты, и они будут сохраняться в data.json, а таблица будет обновляться без перезагрузки страницы.