我正在构建我的第一个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是否正确加载了数据,而且它是。
由于 罗里
答案 0 :(得分:0)
我已经回答了我自己的问题! 我还以编程方式加载了一些实体,并没有使用list_text字段存储的数字加载此字段,而是加载了可视文本。 我使用了元数据包装器,代码如下所示:
$w_appointments_status->$appointments_availability= 'Yes';
我把它改为:
$w_appointments_status->$appointments_availability = 2;
在此示例中'是'是第三个允许值 - 因此2。 所以我的问题中的代码实际上是正确的,尽管我已经添加了' widget'和格式化程序'实例的参数。
我很抱歉,如果这让你们中的一些人挠头思考'但那段代码是正确的#!! 问候 罗里