私はCCKタイプでhook_form_alterを使用しています(drupal-ersの場合)。通常はノードフォームの選択リストであるフィールドがあります。ただし、この例では、選択リストを非表示にして、その値をフォームにSQLクエリで入力します。
すべてが順調に進んでいました。目的の値がHTMLソースに表示されていることがわかったので、クエリが正しく実行されていることがわかりました。ただし、フォームを送信すると、値の最初の文字のみが挿入されます。私のテストのいくつかは566、784、1004の値でした-列の値はそれぞれ5、7、1でした。
最初はDB列の属性である必要があると思いましたが、フィールドを非表示にするform_alterを削除して手動で値を選択すると、正しい値が挿入されますか?!?
<?php
function addSR_form_service_request_node_form_alter(&$form, $form_state) {
if (arg(0) == 'user' && is_numeric(arg(1))) {
$account = arg(1);
$club = 2589;
$form['field_sr_account'] = array( '#type' => 'hidden',
'#value' => $club
);
}
}
?>
なぜ最初の文字だけが挿入されるのか誰にも分かりますか?
注:#valueと#default_valueを使用して列を削除して再作成しようとしましたが、整数の最初の文字のみが送信されます。また、送信ハンドラーを削除することで考えられる原因を排除しましたが、それでも1文字しか送信されませんでした
その他の更新-まだ検索中です! さて、いくつかの良い質問。それらに答えさせてください:
- DB列タイプはinteger(4)です
フックが生成するHTMLは次のとおりです。
input type = "hidden" name = "field_sr_account" id = "edit-field-sr-account" value = "2589"
最新の更新:問題はアレイの構造に限定されていると思います。フォームの変更が処理された後にこのフィールドでvar_dumpを実行すると、これが取得されます。
[43] => Array
(
[#type] => hidden
[#default_value] => 2589
[#post] => Array
(
)
[#programmed] =>
[#tree] =>
[#parents] => Array
(
[0] => field_sr_account
)
[#array_parents] => Array
(
[0] => field_sr_account
)
[#weight] => 0.016
[#processed] => 1
[#description] =>
[#attributes] => Array
(
)
[#required] =>
[#input] => 1
[#process] => Array
(
[0] => form_expand_ahah
)
[#name] => field_sr_account
[#id] => edit-field-sr-account
[#value] => 2589
[#defaults_loaded] => 1
[#sorted] => 1
)
フォームの値を設定できるフィールドの構造は何ですか。それはabhagaが示唆しているようなものでなければなりません。