私は、1つの重要な違いを除いて、通常の用語の参照ウィジェットと同様のフィールドウィジェットを作成しようとしています。ユーザーは、複数の新しい分類用語を同時に追加できる必要があります。
私は機能が分類/オプション/リストモジュールが提供するものに類似しているポイントに到達しました(つまり、チェックボックス/ラジオが表示され、保存など)。
ここで私が使用しているコードの重要なビットがありますhook_field_widget_form()
:
$element += array(
'#type' => $multiple ? 'checkboxes' : 'radios',
'#default_value' => $multiple ? $default_value : reset($default_value),
'#options' => $options,
'#value_key' => $value_key,
'#element_validate' => array('options_field_widget_validate'),
'#properties' => $properties,
);
ここで私を投げているのは、$ elementが通常のフォーム配列ではないため、テキストフィールドとボタンを追加する方法がわからないということです-特に、それらの値は保存されることを意図していないためです。これらのフィールドをウィジェットに追加する最良の方法は何ですか?
必要なJavascriptを追加することに関しては、チェックボックスの#optionsを再構築する関数を呼び出す#ajaxを使用するべきだと思いますか?
前もって感謝します!
編集- 私の最初の質問は非常にあいまいでした、これが私が試したことのいくつかの詳細です:
$element += array(
'#type' => 'fieldset',
'#delta' => $delta,
);
$element['value'] = array(
'#type' => $multiple ? 'checkboxes' : 'radios',
'#default_value' => $multiple ? $default_value : reset($default_value),
'#options' => $options,
'#value_key' => $value_key,
'#element_validate' => array('options_field_widget_validate'),
'#properties' => $properties,
);
$element['text'] = array(
'#type' => 'textfield',
'#title' => t('Add another'),
'#weight' => 5,
);
これは、私が見たさまざまな例を組み合わせたものであり、近づくようです。問題は、エンティティフォームを送信すると次のエラーが発生することです。
通知:未定義のインデックス:taxonomy_field_is_empty()のtid(modules \ taxonomy \ taxonomy.moduleの1402行目)。
私はこの関数を詳しく調べまし$item
たが、構造を持っていることが期待されています$item = array('tid', 2)
。上記のコードを使用すると、どこかから差分が発生しているように見え、最終的にはの構造になり$item
ます$item = array(0, array('tid', 2)
。「0」がどこから来ているのかわかりませんか?
別の編集
$ elementを次のように変更することで、次のコードで上記のエラーを修正できました。
$element += array(
'#type' => 'fieldset',
'#process' => array('taxonomy_free_entry_ignore_parent'),
);
そして関数を追加します:
function taxonomy_free_entry_ignore_parent(&$form, &$form_state, $complete) {
array_pop($form['#parents']);
return $form;
}
エンティティを保存すると、保存されたというメッセージが表示されます。テーブルのフィールドを確認すると、フィールドが保存されていません。何が悪いのですか?