2010-11-05 53 views
0

我的主要問題Drupal的模塊功能主題化是:與AHAH

是否每當形式得到通過AHAH(ahah_helper)重修theme_hook()函數被調用?

我試圖顯示一個選擇框,有一些過濾選項,當用戶改變它時,它下面的表也改變了。

我有這個現在:

function veiculos_listar_form($form_state) 
{ 
    $form = array(); 
    ahah_helper_register($form, $form_state); 

    //biulds $options 

    $form['listar_veics'] = array(
     '#type' => 'fieldset', 
     '#prefix' => '<div id="listar-veics-wrapper">', 
     '#suffix' => '</div>', 
     '#tree' => TRUE, 
     ); 


    if (!isset($form_state['values']['listar_veics']['filial'])) 
     $form['#filial_veic'] = 1; 
    else 
     $form['#filial_veic'] = $form_state['values']['listar_veics']['filial']; 

    $form['listar_veics']['filial'] = array(
     '#type' => 'select', 
     '#title' => "Listar veículos da filial", 
     '#options' => $filiais, 
     '#default_value' => $form['#filial_veic'], 
     '#ahah' => array(
      'event'  => 'change', 
      'path'  => ahah_helper_path(array('listar_veics')), 
      'wrapper' => 'listar-veics-wrapper', 
      'method' => 'replace', 
      ), 
    ); 


    return $form; 
} 

function veiculos_listar_form_submit($form, &$form_state) 
{ 

} 


function _listar_veiculos_tabela($filial) 
{ 
    //builds $header and $data 

    $table = theme_table($header, $data); 
    return $table; 
} 


function theme_veiculos_listar_form($form) 
{ 
    $output = drupal_render($form); 
    $filial = $form['#filial_veic']; 
    $output .= '<br>' . $filial . '<br>'; 
    $output .= _listar_veiculos_tabela($filial); 
    return $output; 
} 

function veiculos_theme() { 
    return array(
     'veiculos_listar_form' => array(
      'arguments' => array('form' => NULL),), 
    ); 
} 

在我的小天真的世界,如果theme_hook被稱爲每AHAH事件(其他城市)它應該工作。

問題是,打印的變量總是相同的,就像用戶選擇的內容沒有被存儲一樣。如果用戶選擇不同的選項,它會顯示新的選項,但是當打印主題時,$ filial變量總是相同的。

像這樣:

http://img230.imageshack.us/img230/9646/62144334.jpg

什麼我可以做,以使這項工作任何建議?我正在開發我們自己的模塊,因此使用views模塊不是一個好主意。

謝謝。

回答

1

你應該用這種方法重做代碼。 阿哈回電我不寫,我認爲你不會有問題。 查看drupal.org上的一些示例

function veiculos_listar_form($form_state) 
{ 
    $form = array(); 
    ahah_helper_register($form, $form_state); 

    //biulds $options 

// remove divs because we do not want to reload selector with ahah 
    $form['listar_veics'] = array(
     '#type' => 'fieldset', 
     '#tree' => TRUE, 
    ); 


    if (!isset($form_state['values']['listar_veics']['filial'])) 
     $form['#filial_veic'] = 1; 
    else 
     $form['#filial_veic'] = $form_state['values']['listar_veics']['filial']; 

    // add cover div here, because we will reload table 
    $form['table'] = array(
     '#prefix' => '<div id="listar-veics-wrapper">', 
     '#suffix' => '</div>', 
     '#type' => 'markup', 
     '#value' => _listar_veiculos_tabela($form['#filial_veic']), 
    ); 

    $form['listar_veics']['filial'] = array(
     '#type' => 'select', 
     '#title' => "Listar veículos da filial", 
     '#options' => $filiais, 
     '#default_value' => $form['#filial_veic'], 
     '#ahah' => array(
      'event'  => 'change', 
      'path'  => ahah_helper_path(array('listar_veics')), 
      'wrapper' => 'listar-veics-wrapper', 
      'method' => 'replace', 
      ), 
    ); 


    return $form; 
} 

function veiculos_listar_form_submit($form, &$form_state) 
{ 

} 


function _listar_veiculos_tabela($filial) 
{ 
    //builds $header and $data 

    $table = theme_table($header, $data); 
    return $table; 
} 


function theme_veiculos_listar_form($form) 
{ 
    $output = drupal_render($form); 
    return $output; 
} 

function veiculos_theme() { 
    return array(
     'veiculos_listar_form' => array(
      'arguments' => array('form' => NULL),), 
    ); 
} 
+0

這幾乎說得沒錯。如果我的確如你所說的那樣,頁面呈現兩個選擇。我所要做的就是將該div放在字段集上,像以前一樣從表中刪除它,然後將表和插入字段插入到該字段集中。如果它沒有像這樣設置,則將呈現兩個選擇,並且該表不會對任何選擇作出反應。現在可以。我沒有意識到表單API有這種標記類型,它真棒。戈納認爲這是正確的答案,但它需要一些小小的編輯。謝謝:D – hfingler 2010-11-06 13:04:54

+0

歡迎:) – 2010-11-06 15:59:08

相關問題