Вы сказали:
Сейчас есть код где по выбору даты или по умолчанию за последние 6 дней собирается таблица
Как сделать чтобы если захотеть дальше загрузить еще больше данных не датами а продолжая листать страницы под загружая автоматически
код php
function testDateCk($test_date){
$test_arr = explode('-', $test_date);
return checkdate($test_arr[0], $test_arr[1], $test_arr[2]);
}
function validateDate($date, $format = 'Y-m-d') {
$d = DateTime::createFromFormat($format, $date);
return $d && $d->format($format) === $date;
}
if(isset($_GET)){
if(isset($_GET['end']) || isset($_GET['start'])){
$TBdate = date('Y-m-d');
if(isset($_GET['end']) && validateDate($_GET['end']))
$endDate = $_GET['end'];
elseif(isset($_GET['end']) && $_GET['end']=='')
$endDate = $TBdate;
else
$endDate = $TBdate;
if(isset($_GET['start']) && $_GET['start']!='' && validateDate($_GET['start']))
$startDate = $_GET['start'];
else
$startDate = $TBdate;
$dateTableSQL = "DATE(date_create) BETWEEN '$startDate' AND '$endDate'";
}else{
$dateTableSQL = "date_create BETWEEN datetime('now', '-6 days') AND datetime('now', 'localtime')";
}
//ACCESS!!!
$access_company_email_id = '';
foreach($_SESSION['company_email_id'] as $key => $val){
if($_SESSION['access_role'][$key]!=0)
$access_company_email_id .= $val.',';
}
$access_company_email_id = rtrim($access_company_email_id,',');
//AND company_email_id IN ($access_company_email_id) //DEBUG REMOVE
//$stkp_n='all';
if(isset($_GET['stkp'])){
$stkp_n = $stkp_nsql = (int)$_GET['stkp'];
if($stkp_n==3 || $stkp_n==4)//обединить в один запрос сделки показа для списка
$stkp_nsql='3,4';
$stkp = "SELECT * FROM inbox_mail WHERE status_kp IN ($stkp_nsql) AND $dateTableSQL AND company_email_id IN ($access_company_email_id) GROUP BY uid,inbox_udate,company_email_id ORDER BY date_create,date_update DESC ";//status_kp = $stkp_n
if($_GET['stkp']=='all'){
$stkp = "SELECT * FROM inbox_mail WHERE status_kp NOT IN (1,11) AND $dateTableSQL AND company_email_id IN ($access_company_email_id) GROUP BY uid,inbox_udate,company_email_id ORDER BY date_create,date_update DESC ";
$stkp_n='all';//all = 0
}
}else {
$stkp_n='all';
$stkp = "SELECT * FROM inbox_mail WHERE status_kp NOT IN (1,11) AND $dateTableSQL AND company_email_id IN ($access_company_email_id) GROUP BY uid,inbox_udate,company_email_id ORDER BY date_create,date_update DESC ";
}
}
//$Result = $SQLite3->query("SELECT * FROM inbox_mail WHERE status_kp=0 ORDER BY date_create,date_update ASC ");
//$Result = $SQLite3->query("SELECT * FROM inbox_mail WHERE status_kp='$stkp' ORDER BY date_create,date_update ASC ");
/* new ajax 07.07
$Result = $SQLite3->query("$stkp");
$INBOX_ALL = ResultSet($Result);
*/
///////////////////PAGE INBOX
if(!empty($_POST)){
// ajax/inbox_data.php
//header('Content-Type: application/json');
// Assume $SQLite3 and $_SESSION are already set up (e.g., via an include)
//require_once 'path/to/your/database_connection.php'; // Adjust as needed
$TBdate = date('Y-m-d');
$startDate = $TBdate;
$endDate = $TBdate;
// Handle date range filtering
if (isset($_GET['start']) && validateDate($_GET['start'])) {
$startDate = $_GET['start'];
}
if (isset($_GET['end']) && validateDate($_GET['end'])) {
$endDate = $_GET['end'];
} elseif (isset($_GET['end']) && $_GET['end'] == '') {
$endDate = $TBdate;
}
if(isset($_GET['start']) || isset($_GET['end']))
$dateTableSQL = "DATE(date_create) BETWEEN '$startDate' AND '$endDate'";
else
$dateTableSQL = "date_create BETWEEN datetime('now', '-6 days') AND datetime('now', 'localtime')";
// Handle access control
$access_company_email_id = '';
foreach ($_SESSION['company_email_id'] as $key => $val) {
if ($_SESSION['access_role'][$key] != 0) {
$access_company_email_id .= $val . ',';
}
}
$access_company_email_id = rtrim($access_company_email_id, ',');
// Handle status filter
$stkp_n = isset($_GET['stkp']) ? $_GET['stkp'] : 'all';
if ($stkp_n != 'all') {
$stkp_n = $stkp_nsql = (int)$stkp_n;
if($stkp_n==3 || $stkp_n==4)//обединить в один запрос сделки показа для списка
$stkp_nsql='3,4';
$stkp = "SELECT * FROM inbox_mail WHERE status_kp IN ($stkp_nsql) AND $dateTableSQL AND company_email_id IN ($access_company_email_id) GROUP BY uid,inbox_udate,company_email_id ORDER BY date_create, date_update DESC";//status_kp = $stkp_n
} else {
$stkp = "SELECT * FROM inbox_mail WHERE status_kp NOT IN (1,11) AND $dateTableSQL AND company_email_id IN ($access_company_email_id) GROUP BY uid,inbox_udate,company_email_id ORDER BY date_create, date_update DESC";
}
// Execute query
$Result = $SQLite3->query($stkp);
$INBOX_ALL = [];
while ($row = $Result->fetchArray(SQLITE3_ASSOC)) {
$INBOX_ALL[] = $row;
}
// Process data for DataTable
$data = [];
foreach ($INBOX_ALL as $valueTable) {
$name_org_info = '';
if ($name_org = $SQLite3->querySingle("SELECT name_org FROM organization WHERE email_org='{$valueTable['inbox_from']}'")) {
$name_org_info = '<br><span class="badge bg-secondary">' . htmlspecialchars($name_org) . '</span>';
}
$data_item = [];
$data_item['file'] = '';
$id_inbox = $valueTable['id'];
$inbox_udate = $valueTable['inbox_udate'];
$date_in_time = date('Y/m/d', $inbox_udate);
$path_save = $date_in_time . '/' . md5($inbox_udate);
if (file_exists('attachments/' . $path_save . '/' . $inbox_udate . '.json')) {
$mail_inbox = json_decode(file_get_contents('attachments/' . $path_save . '/' . $inbox_udate . '.json'), true);
$email_info = isset($mail_inbox['data'][0]['from']['name'])
? '<i class="text-muted">автор:</i> <span class="badge bg-light-subtle border border-light-subtle text-light-emphasis rounded-pill">' . htmlspecialchars($mail_inbox['data'][0]['from']['name']) . '</span>'
: '';
$data_item['file'] = (isset($mail_inbox['data'][0]['attachments']) && count($mail_inbox['data'][0]['attachments']))
? ' <img src="images/paperclip.svg" style="margin-top: -5px; width: 20px;">'
: '';
} else {
$email_info = '';
}
$dt = new DateTime($valueTable['date_create']);
$formatted_date_create = $dt->format('d.m.Y H:i:s');
// Subject column
$subject = htmlspecialchars($valueTable['subject']) . $data_item['file'] . '<br>' . $email_info;
// Email column
$email = htmlspecialchars($valueTable['inbox_from']) . $name_org_info;
// Status column
$status = $valueOrder = $status_textpara = '';
//$valueTable['status_kp'] = 3 || 4
if($valueTable['status_kp'] == 3 || $valueTable['status_kp'] == 4){//добавить сделку
$Result = $SQLite3->query("SELECT * FROM message me
LEFT JOIN orders ord ON me.order_id = ord.id
WHERE me.uid_inbox='{$valueTable['uid']}' ORDER BY date_create DESC ");
$valueTableOrder = $Result->fetchArray(SQLITE3_ASSOC);
if(isset($valueTableOrder['id']))
$valueOrder = '<a class="f5gvfs" href="https://control.mail.com/crm/?order='.$valueTableOrder['id'].'" target="_blank">'.$valueTableOrder['kp_id'].'</a> ';
}
if ($stkp_n === 'all') {
$status = '<span class="badge bg-secondary" style="' . $STATUS_KP[$valueTable['status_kp']][1] . '">' . $valueOrder . $STATUS_KP[$valueTable['status_kp']][0] . '</span>';
$status_textpara = 'Вся почта';
} elseif ($stkp_n == 0) {
$status = '<span class="badge bg-info" style="' . $STATUS_KP[$valueTable['status_kp']][1] . '">' . $STATUS_KP[$valueTable['status_kp']][0] . '</span>';
$status_textpara = 'Непрочитанная почта';
} elseif ($stkp_n == 1) {
$status = '<span class="badge bg-danger" style="' . $STATUS_KP[$valueTable['status_kp']][1] . '">' . $STATUS_KP[$valueTable['status_kp']][0] . '</span>';
$status_textpara = 'Удаленная почта';
} elseif ($stkp_n == 2 || $stkp_n == 4) {
$status = '<span class="badge bg-primary" style="' . $STATUS_KP[$valueTable['status_kp']][1] . '">' . $valueOrder . $STATUS_KP[$valueTable['status_kp']][0] . '</span>';
$status_textpara = 'Прочитанная почта';
} elseif ($stkp_n == 3 || $stkp_n == 4) {
$status = '<span class="badge bg-success" style="' . $STATUS_KP[$valueTable['status_kp']][1] . '">' . $valueOrder . $STATUS_KP[$valueTable['status_kp']][0] . '</span>';//str_replace('TL_KP', '- ', strstr($valueTable['subject'], 'TL_KP'))
$status_textpara = 'Сделки по почте';
} elseif ($stkp_n == 6 ) {
$status = '<span class="badge bg-success" style="' . $STATUS_KP[$valueTable['status_kp']][1] . '">' . $valueOrder . $STATUS_KP[$valueTable['status_kp']][0] . '</span>';
$status_textpara = 'Тендеры в почте';
}
// Button column
$button_class = ($stkp_n == 0 || $stkp_n == 2 ) ? 'btn-outline-warning' : ($stkp_n == 1 || $stkp_n == 11 ? 'btn-outline-danger' : ($stkp_n >= 3 && $stkp_n <= 6 ? 'btn-outline-success' : 'btn-light'));
$button = '<button type="button" class="btn ' . $button_class . '" data-bs-toggle="modal" data-bs-target="#exampleModalScrollable" data-id="' . $valueTable['id'] . '" data-stkp="' . $stkp_n . '">открыть</button>';
$data[] = [
'subject' => $subject,
'email' => $email,
'date_create' => $formatted_date_create,
'status' => $status,
'action' => $button
];
}
$response = [
'data' => $data,
'lastIDtd' => date('Y-m-d H:i:s')
];
echo json_encode($response);
exit;
}
if ($stkp_n === 'all') {
$status_textpara = 'Вся почта';
} elseif ($stkp_n == 0) {
$status_textpara = 'Непрочитанная почта';
} elseif ($stkp_n == 1 || $stkp_n == 11) {
$status_textpara = 'Удаленная почта';
} elseif ($stkp_n == 2) {
$status_textpara = 'Прочитанная почта';
} elseif ($stkp_n == 3 || $stkp_n == 4) {
$status_textpara = 'Сделки в почте';
} elseif ($stkp_n == 6 ) {
$status_textpara = 'Тендеры в почте';
}
код js
<script>
function fmt(date) {
return date.format("YYYY-MM-DD HH:mm");
}
// Periodic table refresh
/*var dataTablNow = setInterval(function() {
$.post('ajax/inbox_data.php', { table_row: $('#lastIDtd').val() }, function(data) {
table1.clear().rows.add(data.data).draw(false);
$('#lastIDtd').val(data.lastIDtd);
}, 'json');
}, 48000);*/
var dataTablNow = setInterval('dataTaNow()', 48000);
function dataTaNow(){
//$('#table1 button').attr('data-id');
//$('#lastIDtd').attr('data-id');
$.post( 'ajax/post.php', { table_row : $('#lastIDtd').val() }, function( data ) {
console.log(data);
var table1 = $('#table1').DataTable();
table1.rows.add(data[0]).draw(false);
//table1.clear().rows.add(data.data).draw(false);
/*table1.rows().every(function () {
var d = this.data();
d.counter++; // update data source for the row
this.invalidate(); // invalidate the data DataTables has cached for this row
});
// Draw once all updates are done
table1.draw();*/
//table1.draw(true);
// Повторно применяем класс updatesclass после перерисовки таблицы
/*table1.on('draw', function() {
// Например, если вы хотите сохранить выделение для строки с определённым data-id
$('.open-btn[data-id="20969"]').closest('tr').addClass('updatesclass');
});*/
$('#lastIDtd').val(data.lastIDtd);
},'json');
}
$(document).ready(function(){
$("form").submit(function(e){
e.preventDefault();
console.log(e);
console.log(e + ' form');
});
const savedLength = localStorage.getItem("table1_length") || 10;
var table1 = $('#table1').DataTable({//var table
ajax: {
method: 'POST',
url: window.location.href,//'ajax/inbox_data.php',
data: function(d) {
d.start = getUrlParameter('start') || '';
d.end = getUrlParameter('end') || '';
d.stkp = getUrlParameter('stkp') || 'all';
},
dataSrc: 'data'
},
columns: [
{ data: 'subject' },
{ data: 'email' },
{ data: 'date_create',
render: function(data, type, row) {
if (type === 'sort' || type === 'type') {
// Преобразуем DD.MM.YYYY HH:mm:ss в YYYYMMDDHHmmss для сортировки
let parts = data.split(/[\s.:]/); // разбиваем по пробелу, точке и двоеточию
if (parts.length >= 6) {
return parts[2] + parts[1] + parts[0] + parts[3] + parts[4] + parts[5]; // YYYYMMDDHHmmss
}
return data;
}
return data; // для отображения оставляем оригинал
}
},
{ data: 'status' },
{ data: 'action', searchable: false, orderable: false }
],
'pageLength': parseInt(savedLength),//parseInt(localStorage.getItem("table1_length") || 10),
'responsive': true,
//"paging" : false,
//"searching" : false,
//"ordering" : true,
scrollCollapse: true,
scrollY: '880px',
"order": [[2,'desc']],
//"columnDefs": [{"type":"date","targets"}],
//"columnDefs" : [{"targets":3, "type":"date-eu"}],
"columnDefs": [ {"targets": 4, "searchable": false, "orderable": false, "visible": true} ],
//"bInfo": true,
processing: true,
"language": {"url": "/ru/datatable/Russian.json" } // "url": "//cdn.datatables.net/plug-ins/9dcbecd42ad/i18n/Russian.json"}
});
//var table = $('#datesTable').DataTable();
// Сохраняем выбор при изменении количества строк
table1.on('length.dt', function (e, settings, len) {
localStorage.setItem("table1_length", len);
});
// Фильтрация по дате
$('#dateRangeForm').on('submit', function(e) {
$('#startDate, #endDate').click();
var table = $('#table1').DataTable();
e.preventDefault();
var startDate = $('#startDate').val();
var endDate = $('#endDate').val();
/*console.log(startDate + endDate);
var url = window.location.href+'&start='+startDate+'&end='+endDate
var url = window.location.toString();
window.location = url.replace(/function=search/, 'function=loginsearch&user=admin&password=admin');
window.location.replace(url);*/
// Если end не указан - ставим сегодняшнюю дату
/*if (!endDate || endDate.trim() === '') {
var today = new Date();
var dd = String(today.getDate()).padStart(2, '0');
var mm = String(today.getMonth() + 1).padStart(2, '0'); // Месяцы от 0 до 11
var yyyy = today.getFullYear();
endDate = yyyy + '-' + mm + '-' + dd;
//endDate = getTodayDate();
}*/
if (endDate.trim() !== '' && startDate.trim() !== '')
updateDateRange(startDate, endDate);
else{
var url = new URL(window.location.href);
window.location.href = url.toString();
}
//table.draw();
});
function getTodayDate() {
var today = new Date();
return today.toISOString().split('T')[0]; // Формат YYYY-MM-DD
}
function updateDateRange(newStart, newEnd) {
// Получаем текущий URL
var url = new URL(window.location.href);
// Обновляем параметры start и end
url.searchParams.set('start', newStart);
url.searchParams.set('end', newEnd);
// Перезагружаем страницу с новым URL
window.location.href = url.toString();
}
// Функция для получения параметров из URL
function getUrlParameter(name) {
var params = new URLSearchParams(window.location.search);
return params.get(name);
}
// Получаем даты из URL
var startDate = getUrlParameter('start');
var endDate = getUrlParameter('end');
// Устанавливаем значения в input fields
if (startDate) {
$('#startDate').val(startDate);
}
if (endDate) {// if (endDate && startDate != '') {
$('#endDate').val(endDate);
}
// Функция для обновления URL
function updateUrl() {
var params = new URLSearchParams(window.location.search);
var newStart = $('#startDate').val();
var newEnd = $('#endDate').val();
// Обновляем или удаляем параметры
if (newStart) {
params.set('start', newStart);
} else {
params.delete('start');
}
if (newEnd) {
params.set('end', newEnd);
} else {
params.delete('end');
}
// Формируем новый URL без перезагрузки (используем history.pushState)
var newUrl = window.location.pathname + (params.toString() ? '?' + params.toString() : '') + window.location.hash;
// Обновляем URL в адресной строке без перезагрузки
history.pushState({}, '', newUrl);
}
// Обработчики изменения дат
$('#startDate, #endDate').on('change, click', function() {
updateUrl();
});