MIGO Web-Development - разработка и cоздание сайтов в Киеве, Украине

Создание сайтов, поисковое продвижение в Google. Сопровождение, тех.поддержка


звонить: +38 (093) 636 78 08
писать: web@migo.com.ua


minishop2 удаляет украинские символы в поле receiver

minishop2 удаляет украинские символы в поле receiver

На днях столкнулся с неприятной ситуацией: В форме заказа 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.

проспект И.Мазепы 5 07300 Украина, Киевская обл., г. Вышгород, +38 (093) 636 78 08
Рассказать друзьям:

comments powered by Disqus