drupal表单字段未加载正确的数据

时间:2015-10-22 14:45:16

标签: drupal-7

我正在构建我的第一个Drupal 7模块,并且在屏幕上遇到编辑可现场实体的问题。我正在使用field_attach_form,它适用于所有接受一个字段,它显示字段默认值而不是该实体的该字段的当前内容。

我有一个文本字段,一个数字字段,一些布尔字段和一个失败的list_text字段。

任何想法我做错了什么?下面的代码是我认为需要的,但如果您需要更多,请告诉我。

在hook_enable中创建字段的代码:

if (!field_info_field('field_available')) {
    $field = array (
      'field_name' => 'field_available',
      'type' => 'list_text',
      'settings' => array(
      'allowed_values' => array('No', 'Provisionally', 'Yes'),
    ),
 );
 field_create_field($field);

创建实例的代码,也在hook_enable中:

 if (!field_info_instance('appointments_status', 'field_available', 'appointments_status')) {
   $instance = array(
     'field_name' => 'field_available',
     'entity_type' => 'appointments_status',
     'bundle' => 'appointments_status',
     'label' => t('Available?'),
     'required' => TRUE,
     'default_value' => array(array('value' => 'No')),
     'description' => t('Set to No if appointments with this status make this slot unavailable, Provisionally means that it will only reserve a space temporarily'),
   );
 field_create_instance($instance);

此实体只有一个与实体名称相同的捆绑包。

在hook_menu中创建URL的代码:

 $items['admin/appointments/appointments_statii/%/edit'] = array(
   'title' => 'Edit appointment status',
   'description' => 'Edit the parameters of the selected status code',
   'page callback' => 'drupal_get_form',
   'page arguments' => array('appointments_status_edit_form',3),
   'access arguments' => array('access administration pages'),
   'type' => MENU_CALLBACK,
 );

表单功能是:

 function appointments_status_edit_form($form, &$form_state) {
   // Get the status id from the form_state args
   $status_id = $form_state['build_info']['args'][0];

   // Load the chosen status entity
   $status = entity_load_single('appointments_status', $status_id);

   // Set up the fields for the form
   field_attach_form('appointments_status', $status, $form, $form_state);

   $form['submit'] = array(
     '#type' => 'submit',
     '#value' => 'Save changes',
     '#weight' => 99,
   );
   return $form;
 }

我已经使用了Devel模块的dpm来检查entity_load_single是否正确加载了数据,而且它是。

由于  罗里

1 个答案:

答案 0 :(得分:0)

我已经回答了我自己的问题! 我还以编程方式加载了一些实体,并没有使用list_text字段存储的数字加载此字段,而是加载了可视文本。 我使用了元数据包装器,代码如下所示:

$w_appointments_status->$appointments_availability= 'Yes';

我把它改为:

$w_appointments_status->$appointments_availability = 2;

在此示例中'是'是第三个允许值 - 因此2。 所以我的问题中的代码实际上是正确的,尽管我已经添加了' widget'和格式化程序'实例的参数。

我很抱歉,如果这让你们中的一些人挠头思考'但那段代码是正确的#!! 问候 罗里