Чтобы на уровне шаблона установить сортировку по id по умолчанию (без правки PHP-кода), можно добавить небольшой JavaScript, который будет проверять наличие параметров сортировки в URL и при их отсутствии перенаправлять на тот же URL с добавлением ?s=id&w=asc (или &s=id&w=asc, если уже есть другие параметры). Так вы сохраните все текущие фильтры и получите нужную сортировку.
Добавьте этот код в конец вашего шаблона users.tpl, например, внутрь существующего тега <script> или отдельным блоком:
<!-- ==================== СОРТИРОВКА ПО ID ПО УМОЛЧАНИЮ ==================== -->
<script>
(function() {
// Проверяем наличие параметра сортировки
// Если в URL нет параметра "s" (т.е. пользователь зашёл без сортировки)
const urlParams = new URLSearchParams(window.location.search);
if (!urlParams.has('s') || urlParams.get('s') === '') {
// Создаём полный URL (сохраняем ВСЁ: фильтры, пагинацию, страну и т.д.)
const currentUrl = new URL(window.location.href);
currentUrl.searchParams.set('s', 'id');
currentUrl.searchParams.set('w', 'asc'); // asc = от старых к новым
// Если хотите по убыванию (новые сверху) — замените 'asc' на 'desc'
// currentUrl.searchParams.set('w', 'desc');
// Делаем редирект (replace — чтобы не засорять историю браузера)
window.location.replace(currentUrl.toString());
}
})();
</script>
<!-- ===================================================================== -->
или
<script>
(function() {
// Проверяем, есть ли в URL параметры сортировки
const urlParams = new URLSearchParams(window.location.search);
const hasSort = urlParams.has('s') && urlParams.has('w');
// Если параметров сортировки нет — добавляем сортировку по id по возрастанию
if (!hasSort) {
// Сохраняем все существующие параметры (фильтры, пагинацию и т.д.)
urlParams.set('s', 'id');
urlParams.set('w', 'asc');
// Формируем новый URL (без якоря, но с параметрами)
let newUrl = window.location.pathname + '?' + urlParams.toString();
// Перенаправляем
window.location.replace(newUrl);
}
})();
</script>
| Критерий | вариант 1 (IIFE) | вариант 2 (DOMContentLoaded) | Рекомендуемый |
| Скорость выполнения | Мгновенно | Ждёт загрузки DOM | Мгновенно |
| Надёжность формирования URL | Хорошая | Отличная (new URL) | Отличная |
| Правильная проверка | Строгая (s && w) | Хорошая (только s) | Самая правильная |
| Сохранение всех параметров | Хорошо | Отлично | Отлично |
| Чистота кода | Норм | Норм | Лучше |
Ключевые преимущества рекомендованного кода:
- Использует new URL(window.location.href) — это современный и самый надёжный способ работать с URL в JavaScript.
- Проверяет только s (как в варианте 2) — правильно, потому что в Cotonti по умолчанию параметр w часто отсутствует.
- IIFE — выполняется сразу, без ожидания DOMContentLoaded.
- replace() — не засоряет историю браузера (пользователь не сможет нажать «Назад» в бесконечный цикл).
Просто вставить этот блок в конец файла users.tpl (перед <!-- END: MAIN -->).