1

私は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文字しか送信されませんでした

その他の更新-まだ検索中です! さて、いくつかの良い質問。それらに答えさせてください:

  1. DB列タイプはinteger(4)です
  2. フックが生成する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が示唆しているようなものでなければなりません。

4

4 に答える 4

2

変更しようとしているフィールドはもともと選択ウィジェットを使用していたため、CCK は を探し$form_state['values']['field_sr_account'][0]['value']ます。フィールドを #hidden タイプに設定し、#value を設定すると、その値が に取得され$form_state['values']['field_sr_account']ます。CCK はその最初の要素にアクセスしようとし、値の最初の文字で終わります。

更新:必要なことを達成する最も簡単な方法は、何かをすることです:

function addSR_form_service_request_node_form_alter(&$form, $form_state) {
   if (arg(0) == 'user' && is_numeric(arg(1))) {
    $account = arg(1);
    $club = 2589;
    // Use this property to store the value to restore back
    $form['#field_sr_account'] = $club;
    $form['field_sr_account'] = array( '#type' => 'hidden','#value' => $club);
   }
}

/*in your submit handler, restore the value in the proper format*/
$form_state['values']['field_sr_account'] = array('0' => array('value' => $form['#field_sr_account']));

古い回答

あなたがやろうとしていることを達成する1つの方法は、全体 $form['field_sr_account']を にコピーし$form['#field_sr_account']てから、送信ハンドラ自体の正しい形式でSQLクエリを介して値を提供することです。

于 2010-01-16T21:29:08.783 に答える
0

cinqoTimo、好奇心から、これはどのようなCCKフィールドですか?整数、10進数、浮動小数点ですか?そのフィールドには、通常はデフォルトでオンになっていない特別なパラメータがありますか?データベースの列タイプは何ですか?

フォームのhtml出力を投稿できますか。それは何が起こっているのかについての手がかりを与えるかもしれません。

このフィールドの値を編集するためにJavaScriptを使用していますか?

addSR_form_service_request_node_submitフックから値の結果を出力してみましたか?そこに違いはありません。

すべての質問でごめんなさい。ほとんどの基地をカバーしたように見えるので、大声で考えてみてください。

于 2010-01-13T04:30:39.300 に答える
0

わかりましたhttp://api.drupal.org/api/drupal/developer--topics--forms_api_reference.html#hiddenhttp://api.drupal.org/api/drupal/developer--topics-をご覧ください-forms_api_reference.html#値

また、hidden の代わりに value を使用することをお勧めします。この情報はhttp://api.drupal.org/api/drupal/developer--topics--forms_api.html/6にあります。

また、タイプ hidden は割り当てたプロパティを持つことが許可されていないため、これが問題を引き起こしている可能性があります。フォーム API で発生する可能性のある使用上の問題は、これらのリソースで回答する必要があります。具体的には送信ボタンを使用して、何を達成しようとしているのかまだ少し不明です。

古い答え:

これが正しく理解できれば、$club が正しく設定されていません。クエリの最初の結果が探している数値である場合、これは機能するはずです。

電話してみる

<?php print_r(db_fetch_array($result)) ?>

クエリから返されたすべてを確認します。

何が間違って設定されているのか、少しわかりません。#value関連付けられた配列内にある場合 、原因はクエリである必要があります。が正しく設定されている場合#value、後でそれを使用することが原因である可能性があります (ここには示されていません)。その値があなたの値である場合、ここで$form_state使用していることはまったくわかりません。$club

また、変数addSR_submit_function を使用していないように見える$form か、呼び出されたときにページの上部に表示されるメッセージを設定する以外に $club を使用していないようです。

正確に何が間違っているのかについて、さらに明確にする必要があるかもしれません。

また、 drupal_set_message関数を呼び出すときは、デバッグ目的でこれを行っているだけですか?

于 2010-01-09T23:35:09.670 に答える
0

確認しませんか

drupal_set_message($form_state['values']['field_sr_account']);

それ以外の

drupal_set_message($club);

addSR_submit_function で?

OK、ただの質問: クエリに対して db_result が返す型がわからないのですが、型変換と何か関係があるのでしょうか? したがって、これは値がintであることを確認することです。

'#value' => (int)$club
于 2010-01-10T07:52:43.243 に答える