Как сравнить сравнение данных со значениями, представленными в веб-форме?

Я пытаюсь использовать веб-формы с модулем Rules .

Как сравнить данные со значениями, представленными в веб-форме?

Например, если веб-форма имеет переключатель «да /нет», как проверить переданное значение да ?

При добавлении нового условия я выбираю:

  • Сравнение данных
  • Селектор данных *
  • Данные (представленное значение веб-формы)

Я не уверен, как получить доступ к определенному form_key, чтобы проверить его значение. Я чувствую, что у данных должно быть больше возможностей выбора.

5 голосов | спросил Ryan Hepple 19 FebruaryEurope/MoscowbFri, 19 Feb 2016 02:26:17 +0300000000amFri, 19 Feb 2016 02:26:17 +030016 2016, 02:26:17

1 ответ


0

Как минимум, убедитесь, что включен модуль правил веб-форм . Некоторые подробности об этом (со страницы проекта):

  

Этот модуль добавляет интеграцию правил в веб-формы.

     

Вы когда-нибудь хотели отреагировать на представление веб-формы, используя правила, но не смогли найти подходящее событие?

     

Правила веб-формы позволяют захватывать представления веб-форм по правилам и делать то, что вы хотели бы сделать с ним (что означает: делать какие-либо правила, позволяющие вам с этим делать).

Возможно, вам также захочется взглянуть на запрос функции предоставить данные представления правилам ». Вот краткое изложение его:

  

В настоящее время данные отправки не подвергаются правилам, кроме как путем замены токенов или пользовательских действий php. Этот патч предоставляет данные представления «первоклассным» способом.

Состояние проблемы - «Нужна работа» ... не «простая» проблема.

Время для работы вокруг ...

Сама же проблема содержит комментарий с обходным способом (это гениально, я думаю, потому что это так просто), вот цитата из него:

  

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

Изображение стоит более 1000 слов, посмотрите отпечаток, включенный в этот комментарий .

... и демо

Рассмотрим это правило (в формате экспорта правил):

{ "rules_validate_a_component_of_a_submitted_webform" : {
    "LABEL" : "Validate a component of a submitted webform",
    "PLUGIN" : "reaction rule",
    "OWNER" : "rules",
    "REQUIRES" : [ "rules", "rules_conditional", "webform_rules" ],
    "ON" : { "webform_rules_submit" : [] },
    "IF" : [
      { "NOT user_has_role" : { "account" : [ "user" ], "roles" : { "value" : { "2" : "2" } } } }
    ],
    "DO" : [
      { "drupal_message" : { "message" : "The webform component submitted by [data:contact_us_first_name-value] (= [data:contact_us_first_name-title]) [data:contact_us_last_name-value] (= [data:contact_us_last_name-title]) contains a field labeled \u0022[data:contact_us_subject-title]\u0022 which has value \u0022[data:contact_us_subject-value]\u0022 and another field \u0022[data:contact_us_message-title]\u0022 which has value \u0022[data:contact_us_message-value-raw]\u0022." } },
      { "variable_add" : {
          "USING" : { "type" : "text", "value" : "[data:contact_us_message-value-raw]" },
          "PROVIDE" : { "variable_added" : { "submitted_form_component_value" : "Submitted form component value" } }
        }
      },
      { "CONDITIONAL" : [
          {
            "IF" : { "text_matches" : { "text" : [ "submitted-form-component-value" ], "match" : "mail.ru" } },
            "DO" : [
              { "drupal_message" : {
                  "message" : "Stop and listen! ... One of the form components of the form you just submitted (= \u0022[submitted-form-component-value:value]\u0022), contains some value that is not allowed around here ...",
                  "type" : "error"
                }
              }
            ]
          }
        ]
      }
    ]
  }
}

Некоторые сведения об этом правиле:

  • Событие правил: после отправки веб-формы
  • Правила Условия: Пользователь НЕ имеет роли «аутентифицирован» (т. е. анонимный пользователь отправил форму).
  • Действия правил:

    • Показать неформальное сообщение на сайте (это только для целей QA, пропустите это действие после того, как вы убедитесь, что оно работает).
    • Добавьте переменную (это ключ всего этого ...), названный submitted_form_component_value и с меткой «Значение компонента отправленной формы "и со значением [data:contact_us_message-value-raw] (компонент формы, который мы хотим проверить в последующих действиях правил).
    • Используйте модуль условных правил для выполнения некоторого сравнения текста. В этом случае он проверяет, содержит ли он mail.ru. Если это так, выполните другие действия, такие как «Показать сообщение об ошибке на сайте». Очевидно, что в этот момент вы можете сделать любую магию правил («IP-адрес блока» кажется уместным).

Знайте: в соответствии с событием Rules, которое мы использовали здесь, Webform был отправлен (и до сих пор я не нашел более подходящее событие, например «Перед отправкой веб-формы»).

Showtime

С приведенным выше правилом, я представил веб-форму. Это сообщение, которое я получил (согласно первому действию Правила):

  

Веб-компонент, представленный Pierre (= Имя :) Vriens (= Фамилия :) содержит поле с надписью «Subject:», которое имеет значение «Это демонстрация проверки веб-компонента с использованием правил ... »и другое поле« Сообщение: », которое имеет значение« Bonjour! »Угадайте, что произойдет ПОСЛЕ того, как я отправлю веб-форму с компонентом формы, содержащим строку типа mail.ru? Ставки открываются ...».

И, конечно же, это сообщение об ошибке, которое следует за ним сразу (в соответствии с последним действием правил):

  

Остановитесь и слушайте! ... Один из компонентов формы только что представленной формы (= «Bonjour!» Угадайте, что произойдет ПОСЛЕ того, как я отправлю веб-форму с компонентом формы, содержащимстрока как mail.ru? Ставки открыты ... "), содержит некоторое значение, которое здесь не допускается ...

PS: В этом примере я использую модуль Условные правила , хотя вы можете также переработайте действие правил для выполнения компонентов правил (в которые вы добавляете соответствующие правила), чтобы вам не нужен этот дополнительный модуль. Подробнее об этом см. В ответе на « Что является альтернативой использованию модуля условных правил? ».

ответил Pierre.Vriens 19 FebruaryEurope/MoscowbFri, 19 Feb 2016 10:49:28 +0300000000amFri, 19 Feb 2016 10:49:28 +030016 2016, 10:49:28

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132