2012-01-20 67 views
1

試圖找出如何解決「非法選擇」錯誤錯誤。Drupal的7 - 使用非FAPI AJAX方法來替換選擇列表時,「已檢測到非法的選擇」爲ajaxed選擇字段(不使用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和標題標籤不會被加入)。 Dblog獲取此錯誤是因爲它嘗試將數據發佈到舊的表單標識(預重建)。

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爲我工作太偉大。謝謝! –