Как сделать проверку только для одного пользовательского поля на Opencart-resolved
Привет я хотел бы сделать проверку для конкретного пользовательского поля на 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, Если пусто, показывает ошибку






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

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'])) {



$custom_fields
, а не массив post. Вам нужно будет пройти через это и продолжать искать подмножество, содержащее счастливое число 7.


array('regexp' => '/' . html_entity_decode($custom_field['validation'], ENT_QUOTES, 'UTF-8') . '/')
выглядит не очень хорошо. Я рекомендую изучить preg_quote()
. Я думаю, что именно это вы и намереваетесь сделать.
