На днях столкнулся с неприятной ситуацией: В форме заказа minishop2 в поле receiver (получатель) не проходят валидацию украинские символы `і`, `є`, `ї`, `ґ`. Как оказалось, сейчас receiver пытается расставить символы только согласно русскому или английскому языку. Прочие специфичные символы других языков, включая украинский - удаляются.
Поскольку данная валидация происходит в классе обработчика заказа msOrderHandler
, нам потребуется расширить функционал данного класса.
В целом, расширение класса будет проходить по уже ранее описаному мной принципу, но основные моменты я все таки повторю.
Для начала в деректории core/components/minishop2/custom/order
создаем файл msOrderHandlerExt.class.php
со следующим содержимым:
<?php
if(!class_exists('msOrderInterface')) {
require_once dirname(dirname(dirname(__FILE__))) . '/model/minishop2/msorderhandler.class.php';
}
class msOrderHandlerExt extends msOrderHandler implements msOrderInterface{
public function validate($key, $value)
{
switch ($key) {
case 'receiver':
$tmp = preg_replace(
// добавили в регулярное выражение украинские символы
array('/[^-a-zа-яёЁіІїЇєЄґҐ\`\s\.]/iu', '/\s+/', '/\-+/', '/\.+/'),
array('', ' ', '-', '.'),
$value
);
$tmp = preg_split('/\s/', $tmp, -1, PREG_SPLIT_NO_EMPTY);
$tmp = array_map(array($this, 'ucfirst'), $tmp);
$value = preg_replace('/\s+/', ' ', implode(' ', $tmp));
if (empty($value)) {
$value = false;
}
break;
// Если прислано поле, которого тут нет - отправляем в дефолтный класс
default:
return parent::validate($key, $value);
}
if ($value === false) {
$value = '';
}
return $value;
}
}
Потом регистрируем его через сниппет или приложение Console.
После чего в Системных настройках находим параметр ms2_order_handler_class
в котором указываем имя созданого нами класса обработчика - msOrderHandlerExt
.
Вот и все. Теперь в форме заказа minishop2 не будет больше вырезать украинские символы в поле для ввода имени receiver.