2012-01-20 7 views
1

非FAPI ajaxメソッドを使用して選択リストを置き換えるときに「不正な選択が検出されました」というエラーを解決する方法を試してみる。ノード上のDrupal 7 - ajaxed selectフィールドの「不正な選択」エラー(Drupal FAPI #ajaxを使用しない)

フォームを作成し、そこに新しい値を追加するctoolsモーダルウィンドウにカスタムフォームを開くには、選択リスト、下のリンクだと、成功した上で選択し、モーダルノード形式でフォームの提出新しい値に置き換えられます。

<?php 
    if (!empty($form_state['executed'])) { 
    // Replace node form select if form submit was successful. 
    module_load_include('inc', 'node', 'node.pages'); 
    $node_form = node_add('photo'); 
    $new_field = drupal_render($node_form[$field]); 
    $output = array(); 
    $output[] = ajax_command_replace($selector, $new_field); 
    $output[] = ctools_modal_command_dismiss(); 
    } 
    print ajax_render($output); 

私はノードフォームを検証するために、キャッシュされたフォームの値を使用していると思われるので、私は「違法な選択肢」エラーを取得する元のノードのフォームを提出するまで、それは仕事を得ることができます。 $ form_stateを設定する['rebuild'] = TRUE;不正な選択エラーを修正しますが、ノードフォームのイメージフィールドが正しく機能しません。イメージファイルはアップロードされノードに保存されますが、サムネイル、altタグ、titleタグは無効になりません)。 Dblogは古い形式のID(事前再構築)にデータをポストしようとしているため、このエラーが発生します。

location: file/ajax/field_image/und/0/form-DSbMdFlKNDaAJSFY4fVIHkcg2eMCDqYZHUfitCnR0VA 
message: Invalid form POST data. 

「違法な選択肢」のエラーを回避するために選択リストを交換する良い方法はあります、または$ form_state [「再構築」]でファイルのモジュールのバグがあるかどう私がチェックすべきですか?可能な代替案として、$ form #ajaxイベントを別のフォームからトリガする方法に関するドキュメントを見つけることができませんでした。それが可能であるかどうかはわかりません。 ガイダンスをいただければ幸いです。

答えて

1

ノードフォームの選択フィールドに、'#validated' => TRUEを追加します。カスタムモジュール内のノードのフォームを変更する必要があります:

mymodule_form_photo_node_form_alter (& $form, & $state) 
{ 
    // Replace 'field_name' with whatever the name of the select field is 
    $form['field_name']['#validated'] = TRUE; 
} 

私はこの質問年以上前に頼まれた参照、うまくいけば、これは他の誰かが答えを探しに役立ちます。

+0

Drupal 6でもこれは素晴らしいものでした。ありがとう! –

関連する問題