Есть замечательная опция в свойствах заказа - "Регулярное выражение для проверки" Когда выбираешь тип свойства "Строка", то появляется поле для ввода регулярного выражения подробности тут
В документации написано:
Цитата
Указывается регулярное выражения для проверки строки, вводимой покупателем.
ОК. В каком виде указывается, как работает - нигде информации нет.
Пишу для информации, может кому-то понадобиться или эту информацию заметят в ТП и предпримут меры.
А что-тут не так, спросите вы?! А я вам отвечу....
чтобы при оформлении заказа в стандартном шаблоне bootstrap_v4 срабатывала js валидация при заполнении поля, то нужно добавлять регулярное выражение без слешей вначале и конце выражения /...шаблон.../ и тем более без флагов после рег. выражения, потому что в js скрипте регулярное выражение передаётся в new RegExp
Код
if (value.length > 0 && arProperty.PATTERN && arProperty.PATTERN.length)
{
re = new RegExp(arProperty.PATTERN);
if (!re.test(value))
errors.push(field + ' ' + BX.message('SOA_INVALID_PATTERN'));
}
тогда как в php проверяется наличие первого слеша в строке и если его нет, то строка оборачивается с обеих сторон в слеши /...шаблон.../
Получается, что для простого регулярного выражения, для которого не важны наличие флагов можно использовать строку регулярного выражения без открывающего и закрывающего слешей и всё будет работать. Но когда нужно использовать флаги то получаем баги, js валидация перестаёт работать.
как одно из решений выше написанный кусок js скрипта был преобразован в
Код
if (value.length > 0 && arProperty.PATTERN && arProperty.PATTERN.length) {
//Добавляем флаги в RegExp
var preparePattern = /^(\/)(.*)([\/])([\/miug]+)$/;
var pattern = arProperty.PATTERN.match(preparePattern);
if(!pattern){
re = new RegExp(arProperty.PATTERN);
if (!re.test(value))
errors.push(field + ' ' + BX.message('SOA_INVALID_PATTERN'));
}else{
re = new RegExp(pattern[2], pattern[4]);
if (!re.test(value))
errors.push(field + ' ' + BX.message('SOA_INVALID_PATTERN'));
}
}
Наверное не самое хорошее решение, но оно работает.
Так же хотелось бы иметь в арсенале поле, для вывода сообщения при ошибке валидации для каждого свойства. Так как это уведомление добавляется в lang шаблона и действительно для всех полей с валидацией по рег. выражению.
Если у кого то есть замечания или советы, как решить этот вопрос проще и лучше, пишите пожалуйста в комментариях.
Павел Петриенко написал: если судить по аналогии с файлами element.php & elementtable.php
Вопрос к разработчикам БУС, а как вообще так получается, что в проекте 2 файла с одним классом в одном пространстве имён? Если это особенность обновления, то может быть это нужно задокументировать, с пометкой "после обновления удалите вручную такой-то файл"...
По пути /crm/configs/sale/ есть компонент bitrix:crm.config.sale.settings выводящий форму с настройками для модуля магазина, там можно назначить ответственного по умолчанию для всех новых заказов. Как мне в БУС получить это и другие значения, находящиеся в этой форме? Логика подсказывает, что должно с помощью метода COption::GetOptionString, но что указывать в параметрах - нигде не могу найти
На сайте настроен шаблон генерации номера заказа. После одного из последних обновлений, во время оформления заказа на странице /order/?ORDER_ID=#ACCOUNT_NUMBER#, перестали отображаться данные о заказе, а выводилось сообщение "Заказ № не найден...". В результате поисков причины было обнаружено, что метод COption::GetOptionString("sale", "account_number_template", "") возвращает false, а он используется в компоненте sale.order.ajax для выбора по какому полю делать фильтрацию в методе CSaleOrder::GetList();
Хорошо, что есть тестовый сайт, без последних обновлений. Сравнил настройки модуля "интернет-магазин" (вдруг заказчик поменял что-то и не сказал), настройки были идентичными, и решение пришло само собой. После сохранения "не изменённых" настроек модуля, всё встало на свои места.
Решение: открыть настройки модуля "Интернет-магазин" и нажать "Сохранить".