Рейтинг:1

Перехват параметров веб-формы WEBFORM OPTIONS ID alter()

флаг cn

[{"value_1":"Dragon fly"},{"value_1":"Agapostemon angelicus"},{"value_1":"Albuna oberthuri"},{"value_1":"Callohesma flavopicta"}]

Это данные JSON, которые мне нужно использовать для импорта радиостанций в веб-формы drupal 8. Я использую hook_webform_options_WEBFORM_OPTIONS_ID_alter() https://www.drupal.org/docs/8/modules/webform/webform-cookbook/how-to-use-options-from-an-external-webservice

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

[{"Стрекоза":"Стрекоза"},{"Agapostemon angelicus":"Agapostemon angelicus"},{"Albuna oberthuri":"Albuna oberthuri"},{"Callohesma flavopicta":"Callohesma flavopicta"}] есть много списков и много данных, но та же проблема.

Это код из модуля, который я сделал, следуя инструкциям:

 * Реализует hook_webform_options_WEBFORM_OPTIONS_ID_alter().
 */
функция my_module_webform_options_external_countries_alter (массив и $ параметры, массив и $ элемент) {
  // Загружаем кешированные опции.
  если ($cache = \Drupal::cache()->get('external_countries')) {
    $options = $кэш->данные;
    возвращаться;
  }

  // Получить данные в виде ассоциативного массива из внешнего веб-сервиса.
  $external_countries_url = 'https://gist.githubusercontent.com/mshafrir/2646763/raw/8b0dbb93521f5d6889502305335104218454c2bf/states_hash.json';
  $options = json_decode(file_get_contents($external_countries_url), TRUE);

  // Кэшировать параметры, чтобы нам не приходилось делать постоянные запросы
  // во внешний веб-сервис.
  \Drupal::cache()->set('external_countries', $options);
}

Geat avatar
флаг de
Просто проверили, что вы заменили CUSTOM_MODULE на имя машины вашего модуля?
Dragan Petrovic FSD avatar
флаг cn
Этот CUSTOM_MODULE скопирован из drupal, но, к сожалению, вы поняли, что я сказал, что сделал по инструкции, это опечатка.
флаг cn
@DraganPetrovicFSD Нет необходимости редактировать свой вопрос, чтобы пометить его как «РЕШЕНО». Вместо этого вам следует подождать пару дней, а затем поставить галочку в зеленом поле, чтобы отметить свой ответ как принятый ответ.
Рейтинг:3
флаг cn

Я только что нашел решение. Я, наверное, плохо объяснил, поэтому ответа не было. Я надеюсь, что решение проблемы, которое у меня было, лучше объяснит ситуацию, в которой я оказался.

function external_usa_list_webform_options_external_countries_alter (массив и $ параметры, массив и $ элемент) {
  // Загружаем кешированные опции.
  если ($cache = \Drupal::cache()->get('external_countries')) {
    $options = $кэш->данные;
    возвращаться;
  }

  // Получить данные в виде ассоциативного массива из внешнего веб-сервиса.
  $external_countries_url = 'https://gist.githubusercontent.com/mshafrir/2646763/raw/8b0dbb93521f5d6889502305335104218454c2bf/states_hash.json';
  $options = json_decode(file_get_contents($external_countries_url), TRUE);

  $options = array_combine(array_values($options), array_values($options));

  // Кэшировать параметры, чтобы нам не приходилось делать постоянные запросы
  // во внешний веб-сервис.
  \Drupal::cache()->set('external_countries', $options);
}

Ответить или комментировать

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