Сам не знаю, но спросит у ИИ и вот что он ответил, возможно он прав, попробуйте на тестовом сервере проделать такое:
Для версии OkayCMS 4.3.4 задача разделяется на два этапа: визуальная проверка (клиентская часть в scripts.tpl) и серверная валидация (PHP-логика), чтобы система не выдавала ошибку при пустом email.
Ниже приведена подробная инструкция по реализации.
1. Изменения в design\okay_shop\html\scripts.tpl
В этой версии OkayCMS для валидации форм часто используется плагин
validator. Вам нужно найти блок, отвечающий за валидацию формы заказа (обычно это селектор .fn_validate_checkout).
Замените или добавьте правила (rules) для полей email и phone:
Код:
$('.fn_validate_checkout').validate({
rules: {
email: {
required: false, // Делаем email необязательным
email: true
},
phone: {
required: true, // Делаем телефон обязательным
digits: true, // Разрешаем только цифры
minlength: 10, // Минимум 10 символов
maxlength: 12 // Максимум 12 символов
}
},
messages: {
phone: {
required: "Введите номер телефона",
digits: "Используйте только цифры",
minlength: "Номер должен быть не менее 10 цифр",
maxlength: "Номер должен быть не более 12 цифр"
}
}
});
2. Изменение шаблона формы заказа (checkout.tpl)
Чтобы пользователь понимал, что правила изменились, найдите файл design\okay_shop\html\checkout.tpl и уберите/добавьте пометку "звездочка" (*
- У поля Email удалите атрибут required (если он есть в HTML5) и символ *.
- У поля Phone добавьте символ * и атрибут data-language="form_enter_phone".
3. Серверная часть (PHP) — Важно!
Если вы измените только JS, сервер OkayCMS все равно может отклонить пустой Email, так как в контроллере прописана проверка.
Вам нужно отредактировать файл: view/OrderView.php (или Okay/Controllers/OrderController.php в зависимости от точной архитектуры 4.3.x).
Найдите фрагмент кода, где проверяется заполнение полей:
PHP:
if (empty($order->name)) {
$this->design->assign('error', 'empty_name');
} elseif (empty($order->email)) { // <--- ЭТУ ПРОВЕРКУ НУЖНО УБРАТЬ ИЛИ ЗАМЕНИТЬ
$this->design->assign('error', 'empty_email');
}
Замените проверку email на проверку телефона:
Код:
if (empty($order->name)) {
$this->design->assign('error', 'empty_name');
} elseif (empty($order->phone)) { // Теперь проверяем телефон
$this->design->assign('error', 'empty_phone');
}
4. Настройка в базе данных (если требуется)
В некоторых версиях поле email в таблице ok_orders может иметь ограничение NOT NULL. Если после правок заказы не сохраняются:
- Зайдите в phpMyAdmin.
- Найдите таблицу ok_orders.
- Измените структуру поля email, установив галочку NULL (разрешить пустое значение).
Что это даст:
- scripts.tpl: Клиент не сможет отправить форму, пока не введет от 10 до 12 цифр в поле телефона.
- OrderView.php: Сервер примет заказ даже без заполненного e-mail.
- Безопасность: Валидация digits: true в JS отсекает ввод букв и спецсимволов.
Подсказка: Если вы хотите, чтобы в админке поле Email также не подсвечивалось красным при редактировании, проверьте аналогичные скрипты в папке backend/design/html/.