4

したがって、hook_field_schema 定義列があり、hook_field_widget_form が設定され、すべての列値が正しく保存されます。

しかし、2 つのフィールドをフィールドセットに入れるとすぐに、それらの値は保存も更新もされません。#tree => FALSE をあちこちに設定しようとしましたが、それも機能しません。

私は何が欠けていますか?サポートされていないだけですか?form_alter フックなどを使用してフィールドセットに移動する必要がありますか?

4

3 に答える 3

5

私は同じ問題を抱えていて、解決策を見つけることができませんでした。多くのことを試した後、それは非論理的なほど単純なものであることが判明しました. まあ、Drupal 初心者の目には。

最初に私はこのようなものを持っていました(簡素化されたバージョン):

$element['mymodulefieldset'] = array(
  '#title' => 'Fieldset title',
  '#type' => 'fieldset',
);

フィールドセットにフィールドを追加しました:

$element['mymodulefieldset']['fieldname'] = array(
  '#title' => "Field title",
  '#type' => 'textfield',
  '#default_value' => '',
);

多くの異なるシナリオを試した後、次のコード行が (ある程度) 機能することがわかりました。フィールドセットを挿入する代わりに、次のように要素をフィールドセットに変更しました。

$element += array(
  '#type' => 'fieldset',
  '#tree' => true
);

次に、要素にフィールドを追加しました。

$element['fieldname'] = array(
  '#title' => "Field title",
  '#type' => 'textfield',
  '#default_value' => '',
);

注意: #title や #weight などの一部の変数は、"ホーム » 管理 » 構造 » コンテンツ タイプ » [コンテンツ タイプ] で制御されますが、その他 (#collapsible や #collapsed など) はここで定義できます。

これがあなたを助けることを願っています!

于 2011-05-13T13:24:28.827 に答える
4

私はそれが古い質問であることを知っていますが、この記事で説明されているこの問題の解決策があります。その#process部分は、フィールドを適切に保存するために使用されるものです。

編集: @alexkb のコメントで説明されているように、この記事の著者はカスタム フィールドのサンプルを更新し、#process ハックを削除しました。より良い解決策として、GitHub コードを使用してください。

于 2012-08-29T12:29:57.340 に答える