Drupal, hook_form_alter добавить поле в узле редактирования / создания - PullRequest
0 голосов
/ 28 июня 2018

У меня есть узел, и мне нужно заполнить поле программно, поэтому вот что я делаю:

 $campaigns = $client->get_campaigns();
    $tab_campaign = array(""=>"Dernière newsletter");
    foreach ($campaigns->response as $camp){
      $tab_campaign[$camp->CampaignID] = $camp->Name;
    }


    $form['field_last_newsletter'] = array(
      '#type' => 'select',
      '#required' => true,
      '#options' => $tab_campaign,
      '#title' => 'Choisir la dernière newsletter',
    );
  }

В этой работе у меня заполнено поле выбора, но когда я выбираю его и нажимаю кнопку «Сохранить», ничего не сохраняется, если я возвращаюсь на страницу редактирования, у выбора есть значение по умолчанию, что я делаю неправильно?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Проблема в том, что вы определяете поле в коде, и поскольку оно не было создано с помощью пользовательского интерфейса, таблица базы данных для хранения его значения не была создана. Я бы посоветовал вам создать это поле через пользовательский интерфейс (/ admin / structure / types / manage / xxxxx / fields), а в вашем hook_form_alter вы просто измените массив #options, чтобы заполнить его. Таким образом, будет создана таблица базы данных для ваших данных, и Drupal будет обрабатывать сохранение данных, заполнение сохраненного значения и т. Д. *

0 голосов
/ 28 июня 2018

Я думаю, что вы ищете allowed_values_function настройка для полей параметров. Это идеальное решение для полей с динамическими параметрами.

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

// Exported field_base: 'field_last_newsletter'
// my_module.features.field_base.inc
$field_bases['field_last_newsletter'] = array(
  // ....
  'settings' => array(
    'allowed_values' => array(),
    'allowed_values_function' => 'my_module_field_last_newsletter_allowed_values',
  ),
  // ....
);

Если вы не используете функции, вы можете внести это изменение, выполнив код PHP или используя hook_update_N

/**
 * Implements hook_update_N().
 * Update the field_last_newsletter field settings to use callback for allowed_values.
 */
function my_module_update_N(&$sandbox) {
  // get default status for field using machine name of field
  $default_stats_field = field_info_field('field_last_newsletter');
  // unset the allowed values
  $default_stats_field['settings']['allowed_values'] = '';
  // function name that provides array of values
  $default_stats_field['settings']['allowed_values_function'] = 'my_module_field_last_newsletter_allowed_values';
  // update value with new value.
  field_update_field($default_stats_field);
}

После сохранения новых настроек вам необходимо реализовать функцию обратного вызова для динамических разрешенных значений.

/**
 * Allowed values callback for field_last_newsletter.
 */
function my_module_field_last_newsletter_allowed_values() {
  // ...
  $campaigns = $client->get_campaigns();
  $tab_campaign = array(""=>"Dernière newsletter");
  foreach ($campaigns->response as $camp){
    $tab_campaign[$camp->CampaignID] = $camp->Name;
  }

  return $tab_campaign;
}
...