OpenCart, Simple и поле для даты

Во время рабочего процесса неожиданно возникла задача добавить покупателям поле «Дата рождения», ввод данных нужно было реализовать не текстовым полем, а выпадающими списками для дня, месяца и года рождения. Возможно, в более поздних версиях Simple уже есть готовое решение, но в моем случае пришлось немножко повозиться. Итак, путь решения следующий, создаем нужное нам поле для пользователя в админке, я все-таки выбрал текстовое, но в принципе тип поля особой роли не играет, после чего начинаем кодить.

Шаг 1.
Лезем в system/library/simple/simple.php, находим функцию, которая выводит поля покупателя и вставляем после:

$html = '';

код приведенный ниже:

if($field['id'] == 'custom_date_of_birth'){
            $date_check = explode('-', $field['value']);
            
            $html = '<select id="day_of_birth" name="day_of_birth"><option value="00"> --- День --- </option>';
            $count = 1;
            do{
                $count < 10 ? $count_day = '0' . $count : $count_day = $count;
                $count_day == $date_check['2'] ? $selected = 'selected' : $selected = '';
                $html .= '<option value="' . $count_day . '"' . $selected . '>'. $count_day . '</option>';
            } while(++$count <= 31);
            $html .= '</select>';
            $html .=  '<select id="month_of_birth" name="month_of_birth"><option value="00"> --- Месяц --- </option>';

            $count = 1;            
            do{
                $count < 10 ? $count_month = '0' . $count : $count_month = $count;
                $count_month == $date_check['1'] ? $selected = 'selected' : $selected = '';
                $html .= '<option value="' . $count_month . '"' . $selected . '>'. $month_array[$count_month] . '</option>';
            } while(++$count <= 12);
            $html .= '</select>';            
            
            $html .=  '<select id="year_of_birth" name="year_of_birth"><option value="0000"> --- Год --- </option>';
            $count_year = 1950;
            do{
                $count_year == $date_check['0'] ? $selected = 'selected' : $selected = '';
                $html .= '<option value="' . $count_year . '"' . $selected . '>'. $count_year . '</option>';
            } while(++$count_year <= date('Y'));
            $html .= '</select>';
            $html .= '<input type="hidden" id="'.$field['id'].'" name="'.$field['from'].'['.$field['id'].']" value="'.$field['value'].'">';
        }

$field['id'] == 'custom_date_of_birth'
– это созданное нами поле, ну а дальнейшее просто вывод по датам. Единственный момент, чтоб не потерять данные о покупателе проверяем значения дня, месяца и года и если они совпадают, добавляем select. Для разбивки даты из базы я решил использовать следующую конструкцию:

$date_check = explode('-', $field['value']); /*$field['value'] – значение нашего поля.

В результате у нас на выходе образовался массив $date_check, в котором: 0-ой элемент это год, 1-ый месяц, 2-ой день.
Ну и в последней строке создаем скрытый input, через который мы будем отправлять данные пользователя.

Шаг 2.
Теперь займемся внешним видом нашего дополнения. Интуитивно понятно, что из воздуха данные в скрытом input не появятся, для устранения данного недоразумения немножко подправим файл catalog/view/theme/[ваша тема]/template/checkout/simplecheckout_customer.tpl.
В конце файла добавляем: 

<script>
    $('#day_of_birth').live('change', function(){
        $('#custom_date_of_birth').val($('#year_of_birth').val() + '-' + $('#month_of_birth').val() + '-' + $('#day_of_birth').val());
    });
    $('#month_of_birth').live('change', function(){
        $('#custom_date_of_birth').val($('#year_of_birth').val() + '-' + $('#month_of_birth').val() + '-' + $('#day_of_birth').val());
    });
    $('#year_of_birth').live('change', function(){
        $('#custom_date_of_birth').val($('#year_of_birth').val() + '-' + $('#month_of_birth').val() + '-' + $('#day_of_birth').val());
    });
</script>

Вроде ничего не пропустил и теперь у нас на сайте появится симпатичный ввод даты, а главное работающий. Ну и напоследок дабы закрыть возможные вопросы, в принципе никто ен мешает вам вынести javascript в файл отдельный от шаблона. На этом все, спасибо за внимание, возможно кому-нибудь пригодится.
  • +1
  • 10 октября 2014, 17:00
  • Maugli

Комментарии (0)

RSS свернуть / развернуть
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.
comments powered by Disqus