Как сделать проверку только для одного пользовательского поля на Opencart-resolved

Как сделать проверку только для одного пользовательского поля на Opencart-resolved

03.07.2019 03:26:12 Просмотров 28 Источник

Привет я хотел бы сделать проверку для конкретного пользовательского поля на Opencart 2.3.0.2. В моем коде мне пришлось отключить проверку по умолчанию, поэтому мне нужно сделать проверку только для одного пользовательского поля в форме. Пользовательское поле под названием "Номер" - это номер адреса клиента. Цель проверки-проверить, пусто поле или нет. Так что я делаю это.

$this->load->model('account/custom_field');

            $custom_fields = $this->model_account_custom_field->getCustomFields($this->config->get('config_customer_group_id'));

            foreach ($custom_fields as $custom_field) {
                if (($custom_field['location'] == 'address') && $custom_field['required'] && empty($this->request->post['custom_field'][$custom_field['custom_field_id'] == 7])) {$json['error']['custom_field' . $custom_field['custom_field_id'] == 7] = sprintf($this->language->get('error_custom_field'), $custom_field['name']);}} 

Но когда я отправляю форму, она не показывает никакой ошибки или div с текстовой опасностью. Может кто-нибудь поможет с этим кодом. Я вам очень благодарен

У opencart есть код по умолчанию в массиве, который проверяет все поля. Что я сделал, так это удалил эту конфигурацию проверки и сделал только для одного поля. Таким образом, проверка по умолчанию для настраиваемого поля, расположенного в форме checkout/checkout-shiping_address, является,

foreach ($custom_fields as $custom_field) {
                if (($custom_field['location'] == 'address') && $custom_field['required'] && empty($this->request->post['custom_field'][$custom_field['custom_field_id']])) {
                    $json['error']['custom_field' . $custom_field['custom_field_id']] = sprintf($this->language->get('error_custom_field'), $custom_field['name']);
                } elseif (($custom_field['location'] == 'address') && ($custom_field['type'] == 'text') && !empty($custom_field['validation']) && !filter_var($this->request->post['custom_field'][$custom_field['custom_field_id']], FILTER_VALIDATE_REGEXP, array('options' => array('regexp' => '/' . html_entity_decode($custom_field['validation'], ENT_QUOTES, 'UTF-8') . '/')))) {
                    $json['error']['custom_field' . $custom_field['custom_field_id']] = sprintf($this->language->get('error_custom_field'), $custom_field['name']);
                }
            }

я прокомментировал этот код и внес эту модификацию

foreach ($custom_fields as $custom_field) {
                if (($custom_field['location'] == 'address') && $custom_field['required'] && empty($this->request->post['custom_field'][$custom_field['custom_field_id']])) {

                    //number field
                    if($custom_field['custom_field_id'] == 7) {
                    $json['error']['custom_field' . $custom_field['custom_field_id']] = sprintf($this->language->get('error_custom_field'), $custom_field['name']);
                    }

                } elseif (($custom_field['location'] == 'address') && ($custom_field['type'] == 'text') && !empty($custom_field['validation']) && !filter_var($this->request->post['custom_field'][$custom_field['custom_field_id']], FILTER_VALIDATE_REGEXP, array('options' => array('regexp' => '/' . html_entity_decode($custom_field['validation'], ENT_QUOTES, 'UTF-8') . '/')))) {
                    $json['error']['custom_field' . $custom_field['custom_field_id']] = sprintf($this->language->get('error_custom_field'), $custom_field['name']);
                }
            }

я просто делаю условие проверки, если это custom_field 7, Если пусто, показывает ошибку

У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/56870143/how-to-make-a-validation-for-only-one-custom-field-on-opencart-resolved#comment100289353_56870143
Я пытаюсь проверить, пусто ли пользовательское поле 7. Если пустой показывает текст-опасность, если нет, просто отправьте форму
https://stackoverflow.com/questions/56870143/how-to-make-a-validation-for-only-one-custom-field-on-opencart-resolved#comment100289876_56870143
Может быть, это прояснит ваш вопрос: 3v4l.org/PrAmj
https://stackoverflow.com/questions/56870143/how-to-make-a-validation-for-only-one-custom-field-on-opencart-resolved#comment100289943_56870143
Я отредактировал свой вопрос, поместив массив о foreach ($custom_fields как $custom_field) {
https://stackoverflow.com/questions/56870143/how-to-make-a-validation-for-only-one-custom-field-on-opencart-resolved#comment100290054_56870143
Насчет вашей ссылки, я не понимаю

Ответы - Как сделать проверку только для одного пользовательского поля на Opencart-resolved / How to make a Validation for only one custom field on Opencart - resolved

Является ответом!
mickmackusa

03.07.2019 04:03:12

Вам нужно отделить логику условий. Прямо сейчас вы уплотнили свой синтаксис и повредили логику.

empty($this->request->post['custom_field'][$custom_field['custom_field_id'] == 7])
// this is performing an evaluation -------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// returning a true or false value
// if false, the key is converted to 0 because false isn't a valid key
// if true, the key is converted to 1

Проблема в том , что у вас нет этих цифровых клавиш в $this->request->post['custom_field'], поэтому они заставят empty()возвратить true. Используйте это вместо этого:

if ($custom_field['location'] == 'address'
    && $custom_field['required']
    && // iterate your post array and check $post['custom_field_id'] == 7
    && // iterate your post array and check empty($post['custom_field_value'])) {
https://stackoverflow.com/questions/56870143/how-to-make-a-validation-for-only-one-custom-field-on-opencart-resolved/56870789#comment100290876_56870789
Вы правы, это не делает выбор, если пусто или нет. Я попробовал ваш код, и я настроил его так: if is empty shows: is empty, if not is fulled. Ошибка журнала показывает мне оба сообщения
https://stackoverflow.com/questions/56870143/how-to-make-a-validation-for-only-one-custom-field-on-opencart-resolved/56870789#comment100291407_56870789
Значит, я решил твой вопрос? Или вам нужна помощь в циклическом просмотре массива post?
https://stackoverflow.com/questions/56870143/how-to-make-a-validation-for-only-one-custom-field-on-opencart-resolved/56870789#comment100291569_56870789
Я только что заметил , что вы перебираете $custom_fields, а не массив post. Вам нужно будет пройти через это и продолжать искать подмножество, содержащее счастливое число 7.
https://stackoverflow.com/questions/56870143/how-to-make-a-validation-for-only-one-custom-field-on-opencart-resolved/56870789#comment100293043_56870789
Я изменил свой вопрос с решением. Я ценю твою помощь, я слишком многому научился.
https://stackoverflow.com/questions/56870143/how-to-make-a-validation-for-only-one-custom-field-on-opencart-resolved/56870789#comment100293569_56870789
Ваш код слишком длинный для меня, чтобы правильно читать на моем телефоне, но array('regexp' => '/' . html_entity_decode($custom_field['validation'], ENT_QUOTES, 'UTF-8') . '/')выглядит не очень хорошо. Я рекомендую изучить preg_quote(). Я думаю, что именно это вы и намереваетесь сделать.
https://stackoverflow.com/questions/56870143/how-to-make-a-validation-for-only-one-custom-field-on-opencart-resolved/56870789#comment100293596_56870789
Если мой ответ решил вашу проблему, вы можете отметить мой ответ зеленой галочкой.
Закрыть X