2012-11-26 193 views
2

我正在構建一個自定義程序塊,它有兩個選擇框。第一個是自動填充的,第二個是基於第一個的值填充的。理想情況下,我想使用AJAX,並且我有將Ajax集成到標準形式的經驗,但是塊配置形式不包含$ form_state變量,並且似乎功能不同。標準方法可以使用嗎?Drupal 7塊配置AJAX

'#ajax'    => array(
    'callback'   => 'my_callback', 
    'wrapper'   => 'the-id', 
    'method'   => 'replace', 
    'effect'   => 'fade', 
), 

回調會如何工作?

感謝, 豪伊

+0

我很傷心,這沒有任何迴應。你有沒有得到它的工作或找到你的答案?跟進鏈接會很棒,因爲我正在處理完全相同的事情。 –

+0

添加了一些東西:-) – Chris

回答

0

我沒有嘗試,但我敢打賭,它的工作原理:利用hook_form_alter()來訪問你的模塊配置形式。在那裏,你將有一個& $ form_state,並能夠做到花式AJAX的東西(see this)。 困難的部分是隻在alter-hook上修改你的表單。可能的方式:

不知道這是否正常工作(最優雅的方式):

function mymodule_form_alter(&$form,&$form_state,$form_id) { 
     if ($form_id == 'block_admin_configure') { 
     // Find the delta in the $form variable 
     if ($form['delta'] == 'the_delta_you_are_looking_for') { 
     //do fancy ajax stuff 
     } 
     } 
    } 

醜,但絕對有可能的:

function mymodule_form_alter(&$form,&$form_state,$form_id) { 
    if ($form_id == 'block_admin_configure' && arg(4) == 'mymodule') { 
     //do fancy ajax stuff 
    } 
    } 
} 

即使醜陋,但也有可能:

function mymodule_block_configure($delta = '') {  
    $form = array(); 
    if ($delta == 'my_block') { 
     $form["my_block_change_this"] = array(
      "#type" => "hidden", 
      "#value" => "lalala", 
     ) 
    } 
} 

function mymodule_form_alter(&$form,&$form_state,$form_id) { 
    if ($form_id == 'block_admin_configure') { 
     if (!empty($form['my_block_change_this'])) { 
      //do fancy ajax stuff 
     } 
    } 
} 

提示:打印出form_state-array(在修改掛鉤處),看看那裏有什麼(這總是我做的第一件事情我遇到FAPI問題)。希望這可以幫助。