Информация Adult Control | Фишки +18

sergiykhd

Prestashop Expert
Регистрация
17 Апр 2013
Сообщения
1.230
Реакции
1.150
Преста 1.7 - модуль не нашел, приходится копать в ручную)

Стоит задача - при регистрации, сделать дату рождения обязательной и когда клиент вводит дату, система пропускает +18 лет, а если -18 - пишет, что-то типа вам сюда нельзя.

Кто-то реализовывал подобное ? - буду признателен за подсказку.
 
Последнее редактирование:
Встречал решение подобной задачи с обязательным указанием даты рождения в popup-окошке.
Не простенькое Warning-окошко с текстом "Вам есть 18? да/нет", а именно окно с требованием ввести дату рождения (скрин)
Модуль тут -> Для просмотра ссылки Войди или Зарегистрируйся
scann.jpg
 
Встречал решение подобной задачи с обязательным указанием даты рождения в popup-окошке.
Не простенькое Warning-окошко с текстом "Вам есть 18? да/нет", а именно окно с требованием ввести дату рождения (скрин)
Модуль тут -> Для просмотра ссылки Войди или Зарегистрируйся
Посмотреть вложение 108571
Видел такое, но нужно в момент оформления.

Ну ок, может кому пригодится:
1. в \classes\form\CustomerFormatter.php

меняем
Код:
        if ($this->ask_for_birthdate) {
            $format['birthday'] = (new FormField)
                ->setName('birthday')
                ->setType('text')
                ->setLabel(
                    $this->translator->trans(
                        'Birthdate', [], 'Shop.Forms.Labels'
                    )
                )
                ->addAvailableValue('placeholder', Tools::getDateFormat())
                ->addAvailableValue(
                    'comment',
                    $this->translator->trans('(E.g.: %date_format%)', array('%date_format%' => Tools::formatDateStr('31 May 1970')), 'Shop.Forms.Help')
                )
            ;
        }
на
Код:
        if ($this->ask_for_birthdate) {
            $format['birthday'] = (new FormField)
                ->setName('birthday')
                ->setType('text')
                ->setLabel(
                    $this->translator->trans(
                        'Birthdate', [], 'Shop.Forms.Labels'
                    )
                )
                ->addAvailableValue('placeholder', Tools::getDateFormat())
                ->addAvailableValue(
                    'comment',
                    $this->translator->trans('(E.g.: %date_format%)', array('%date_format%' => Tools::formatDateStr('31 May 1970')), 'Shop.Forms.Help')
                )->setRequired(true)
            ;
        }

2. в \classes\Validate.php
меняем
Код:
    public static function isBirthDate($date)
    {
        if (empty($date) || $date == '0000-00-00') {
            return true;
        }
        if (preg_match('/^([0-9]{4})-((?:0?[1-9])|(?:1[0-2]))-((?:0?[1-9])|(?:[1-2][0-9])|(?:3[01]))([0-9]{2}:[0-9]{2}:[0-9]{2})?$/', $date, $birth_date)) {
            if ( $birth_date[1] > date('Y')
                || ($birth_date[1] > date('Y') && $birth_date[2] > date('m'))
                || ($birth_date[1] > date('Y') && $birth_date[2] > date('m') && $birth_date[3] > date('d'))
                || ($birth_date[1] == date('Y') && $birth_date[2] == date('m') && $birth_date[3] > date('d'))
                || ($birth_date[1] == date('Y') && $birth_date[2] > date('m')) ) {
                return false;
            }
            return true;
        }
        return false;
    }

на

Код:
    public static function isBirthDate($date)
    {
        if (empty($date) || $date == '0000-00-00') {
            return false;
        }
        if (preg_match('/^([0-9]{4})-((?:0?[1-9])|(?:1[0-2]))-((?:0?[1-9])|(?:[1-2][0-9])|(?:3[01]))([0-9]{2}:[0-9]{2}:[0-9]{2})?$/', $date, $birth_date)) {
            if ((floor((time() - strtotime($date)) / 31556926)) < 18)
                return false;
               
            if ($birth_date[1] > date('Y') && $birth_date[2] > date('m') && $birth_date[3] > date('d'))
                return false;

            return true;
        }
        return false;
    }
 
Последнее редактирование модератором:
Назад
Сверху