0

我有一个节点,我需要以编程方式填充一个字段,所以这就是我要做的:

 $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',
    );
  }

这项工作,我填充了我的选择字段,但是当我选择一个并单击保存时,没有保存任何内容,如果我回到编辑页面,选择具有默认值,我做错了什么?

谢谢。

4

2 回答 2

0

这里的问题是您在代码中定义了一个字段,并且由于这不是通过 UI 创建的,因此没有创建用于存储其值的数据库表。我建议您通过 UI (/admin/structure/types/manage/xxxxx/fields) 创建此字段,并在您的 hook_form_alter 中更改 #options 数组以填充它。这样,将为您的数据创建一个数据库表,Drupal 将处理保存数据、填充保存的值等...

于 2018-06-29T17:22:37.020 回答
0

我认为您正在寻找allowed_values_function 选项字段的设置。它是具有动态选项的字段的完美解决方案。

首先,您需要更改当前字段设置以使用该功能设置允许的值。为此,请修改 features 中的字段设置(如果使用):

// 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;
}
于 2018-06-28T19:44:47.710 回答