Получение выбранных значений из чекбоксов и радио-кнопок через хук gform_after_submission в Gravity Forms

27 нояб. 2015 г., 15:07:25
Просмотры: 13.8K
Голосов: 3

Gravity Forms предлагает довольно хорошую документацию, и, конечно, Google дает больше информации о том, как разработчики решали различные задачи, связанные с этим плагином. Однако нам нужно выполнить, казалось бы, относительно простую задачу, но мы не можем найти никаких задокументированных методов для этого.

Мы используем хук gform_after_submission для открытия транзакции к SOAP веб-сервису и передачи некоторых отправленных значений формы.

Точка, в которой мы застряли, — это получение выбранного значения (или значений) из радио-кнопок и чекбоксов (а также, предположительно, из элементов <select>).

Gravity Forms использует систему передачи полей по ID и десятичные точки для передачи значений из радио-кнопок — например:

Название поля: Префикс - ID поля: 1 - Значения поля: 1.1 "Mr.", 1.2 "Mrs."

Gravity Forms передает массив значений в хук — если выбрана опция "Mr.", массив выглядит так:

array(..) {
    ["1.1"]=> string(0) "Mr."
    ["1.2"]=> string(0) ""
}

Но в массиве нет указания на то, какое значение было выбрано — он просто передает строки для обоих значений.

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

Поиск в кодовой базе Gravity Forms показывает несколько возможных решений, таких как:

$value         = RGFormsModel::get_lead_field_value( $lead, $field );
$display_value = GFCommon::get_lead_field_display( $field, $value, $lead['currency'] );

Этот метод требует объект $lead (также называемый объектом $entry), который доступен, но метод не возвращает корректное значение, ссылаясь на отсутствие данных.

Другой вариант:

GFFormsModel::get_lead_field_value( $lead, $field );

Однако для этого требуется передать правильно отформатированный объект $field, который является частью объекта $form — опять же, не самый чистый путь.

Одна из идей — поискать отправленные значения в объекте $_POST. Он включает только установленные значения, а не пустые — так, в случае с Префиксом:

["input_1_1"]=> string(3) "Mr."

Надежное решение должно опираться на информацию о поле, хранящуюся внутри Gravity Forms, например, количество значений каждого поля — перебирать их и проверять, установлено ли каждое значение, прежде чем возвращать форматированную строку с выбранными значениями, разделенными запятой.

Возможно, в Gravity Forms уже есть готовое решение для этой проблемы — однако в документации ничего нет. Любые идеи приветствуются!

0
Все ответы на вопрос 1
1

Если у вас есть объект формы/поля, вы можете получить строку с разделителями-запятыми, содержащую выбранные значения полей, используя метод GF_Field::get_value_export(), который был добавлен в Gravity Forms 1.9.13.

Если вы собираетесь использовать его только с одним или двумя полями, вы можете сделать следующее:

$field_id    = 4;
$field       = GFFormsModel::get_field( $form, $field_id );
$field_value = is_object( $field ) ? $field->get_value_export( $entry ) : '';

Приведенный выше код вернет значения выбранных опций. Если вы хотите получить текст опций, установите третий параметр get_value_export() в true, например:

$field_value = is_object( $field ) ? $field->get_value_export( $entry, $field_id, true ) : '';

Если вам нужно получить доступ ко всем значениям полей в записи, но вы хотите, чтобы соответствующие типы полей форматировались с использованием текста опций, вы можете сделать следующее:

add_action( 'gform_after_submission', function ( $entry, $form ) {

    foreach ( $form['fields'] as $field ) {
        $field_value = $field->get_value_export( $entry, $field->id, true );
        // сделать что-то со значением поля.
    }

}, 10, 2 );
27 нояб. 2015 г. 17:36:25
Комментарии

Это дает мне все флажки, а не только отмеченные, и нет различия между отмеченными и неотмеченными. Судя по тому, что вам нужно, и вашему подтверждению ответа, кажется, что должны отображаться только отмеченные флажки, верно?

Tiffany Israel Tiffany Israel
12 мая 2017 г. 17:48:02