Финансовая поддержка VPS, бесплатные дополнения и docs Донаты оплачивают сервер и двигают бесплатные дополнения MODX и документацию. Поддержать

Всего 126 087 комментариев

Артур Шевченко
Артур Шевченко
После загрузки файла триггерится событие change вероятно по нему и происходит отправка.

чтобы обязательные поля в квизе проверялись не в момент отправки всего квиза
есть отменяемое событие si:quiz:change добавь слушателя и проверяй, если не всё заполнено делай e.preventDefault() и показывай ошибку
Wassi Wassinen
Wassi Wassinen
Николай, прежде всего — вы молодец.

А про кеширование — можно пойти по правилу Парето.
То есть дать возможность закешировать самое частое — это «фильтры первого уровня». То есть самые базовые варианты (без выбора нескольких фильтров). Именно их используют чаще всего и именно они (после выборки всего каталога) имеют самые тяжелые запросы. Если в фильтрах есть, например: производитель, стиль и цена. Цену мы закешировать вряд ли можем (она, как правило, выбирается диапазоном). А вот производителей и стили — можем. Это снимет большую часть более тяжелых запросов с сервера (потому что выборка всё ещё довольно существенная на больших каталогах даже при выборе только производителя или только стиля). А выборка в формате «производитель + стиль» уже не такая тяжелая.
Николай Савин
Николай Савин
На данный момент кеширование отлажено только для каталогов без примененных фильтров. Такие страницы отрываются достаточно быстро. Обычно это 300-400 ms
А вот как сделать удачное кеширование страниц с примененными фильтрами я пока не знаю. Слишком большой набор вариаций и пересечений. Это называется вариативный взрыв. Хорошая новость в том, что даже с одним примененным фильтром товаров в каталоге остается не так много — и вся эта история загрузится сильно быстрее чем пустой каталог.
Евгений
Евгений
На всякий скопирую код для Bootstrap 4 (есть старый проект, лень переезжать на 5 версию):
/* Закрыть модальное окно после отправки */
document.addEventListener('si:send:success', (e) => {
    $('#id_формы').modal('hide');
})