开发者

Why can't I move a field into a fieldset in a Drupal form - fails to pick up current value

I have a node form in Drupal 7, in order to simplify it for the user I want to break it up into sections using the vertical tabs feature.

Using hook_form_FORMID_alter() I can move the fields without difficulty. When the node is saved, it writes the values correctly, and they appear in the node view.

But w开发者_如何学编程hen I re-edit the node any value for a moved field is not set so I effectively lose the data. I've tried various options including changing the array_parents value in form_state['fields'][field][langcode].

(I wondered whether it would be better to move the fields during pre_render instead.)

Any ideas?


Field API fields by default are placed into a container field type. If you want to convert them to a fieldset in the vertical tabs, you can do the following:

$form['field_tags']['#type'] = 'fieldset';
$form['field_tags']['#title'] = 'Tags';
$form['field_tags']['#group'] = 'additional_settings';

A better solution would be to use the new Field Group module so you can make these modifications through the UI, rather than in code.


Sometimes it works better to move field items around in the #after_build step of the form creation process.

in hook_form_alter, you set your after build function like so:

function mymodule_form_alter(&$form, &$form_state, $form_id)
{
    $form['#after_build'][] = 'mymodule_myform_after_build';
}

Then you define your after_build function like so:

function mymodule_myform_after_build($form)
{
   //do stuff to the form array
   return $form;
}

I think you can even define after_build on individual elements.

Anyway, it's a good way to alter the form after all the modules have done their thing.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜