3

Drupal 7にノードフォームがあります。ユーザーが簡単にするために、垂直タブ機能を使用してノードフォームをセクションに分割します。

hook_form_FORMID_alter()を使用すると、フィールドを問題なく移動できます。ノードが保存されると、値が正しく書き込まれ、ノードビューに表示されます。

しかし、ノードを再編集すると、移動されたフィールドの値が設定されないため、データが事実上失われます。form_state ['fields'] [field] [langcode]のarray_parents値を変更するなど、さまざまなオプションを試しました。

(代わりに、pre_render中にフィールドを移動する方がよいかどうか疑問に思いました。)

何か案は?

4

2 に答える 2

3

デフォルトでは、フィールドAPIフィールドはコンテナフィールドタイプに配置されます。それらを垂直タブのフィールドセットに変換する場合は、次のようにすることができます。

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

より良い解決策は、新しいフィールドグループモジュールを使用して、コードではなくUIを介してこれらの変更を行えるようにすることです。

于 2011-02-01T15:34:58.383 に答える
2

フォーム作成プロセスの#after_buildステップでフィールドアイテムを移動した方がよい場合があります。

hook_form_alterで、次のようにアフタービルド関数を設定します。

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

次に、after_build関数を次のように定義します。

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

個々の要素でafter_buildを定義することもできると思います。

とにかく、すべてのモジュールが処理を完了した後でフォームを変更するのは良い方法です。

于 2011-02-01T20:52:31.427 に答える