Исправлена сортировка: обработка массива sort от Tabulator

Tabulator отправляет sort как массив [{"field":..., "dir":...}],
а код ожидал объект {"field":..., "dir":...}. Добавлена конвертация.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Mikhail Chusavitin
2026-01-22 11:18:16 +03:00
parent d5602ae398
commit fcfd785b04

View File

@@ -37,24 +37,18 @@ class DataService
$whereSql = $whereParts ? 'WHERE ' . implode(' AND ', $whereParts) : '';
$orderSql = '';
// Логируем в файл
$logFile = __DIR__ . '/../debug.log';
file_put_contents($logFile, date('Y-m-d H:i:s') . " === SORT DEBUG ===\n", FILE_APPEND);
file_put_contents($logFile, "Sort param: " . json_encode($sort) . "\n", FILE_APPEND);
file_put_contents($logFile, "Column names count: " . count($colNames) . "\n", FILE_APPEND);
if ($sort && !empty($sort['field'])) {
$fieldExists = in_array($sort['field'], $colNames, true);
file_put_contents($logFile, "Field '{$sort['field']}' exists: " . ($fieldExists ? 'YES' : 'NO') . "\n", FILE_APPEND);
if ($fieldExists) {
$dir = strtoupper($sort['dir'] ?? 'ASC');
if (!in_array($dir, ['ASC', 'DESC'], true)) {
$dir = 'ASC';
}
$orderSql = "ORDER BY `{$sort['field']}` $dir";
file_put_contents($logFile, "ORDER SQL: $orderSql\n", FILE_APPEND);
// ✅ Если sort пришёл как массив [{"field":..., "dir":...}], берём первый элемент
if ($sort && is_array($sort) && isset($sort[0])) {
$sort = $sort[0];
}
if ($sort && !empty($sort['field']) && in_array($sort['field'], $colNames, true)) {
$dir = strtoupper($sort['dir'] ?? 'ASC');
if (!in_array($dir, ['ASC', 'DESC'], true)) {
$dir = 'ASC';
}
} else {
file_put_contents($logFile, "No sort (sort is null or field empty)\n", FILE_APPEND);
$orderSql = "ORDER BY `{$sort['field']}` $dir";
}
$sql = "SELECT $selectList
@@ -697,6 +691,12 @@ private function formatRowData(array $rowData): string
$whereSql = $whereParts ? 'WHERE ' . implode(' AND ', $whereParts) : '';
$orderSql = '';
// ✅ Если sort пришёл как массив [{"field":..., "dir":...}], берём первый элемент
if ($sort && is_array($sort) && isset($sort[0])) {
$sort = $sort[0];
}
if ($sort && !empty($sort['field']) && in_array($sort['field'], $colNames, true)) {
$dir = strtoupper($sort['dir'] ?? 'ASC');
if (!in_array($dir, ['ASC', 'DESC'], true)) {