Drupal模块功能主题化与ahah

Drupal模块功能主题化与ahah,drupal,drupal-themes,ahah,Drupal,Drupal Themes,Ahah,我的主要问题是: 每当通过ahah(ahah\u helper)重建表单时,会调用theme\u hook()函数吗 我试图显示一个带有一些过滤选项的选择框,当用户更改它时,它下面的表格也会更改 我现在有这个: function veiculos_listar_form($form_state) { $form = array(); ahah_helper_register($form, $form_state); //biulds $options $for

我的主要问题是:

每当通过ahah(ahah\u helper)重建表单时,会调用theme\u 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),),
    );
}
函数veiculos\u listar\u form($form\u state)
{
$form=array();
ahah_helper_register($form,$form_state);
//biulds$期权
$form['listar_veics']=数组(
“#类型”=>“字段集”,
“#前缀”=>”,
“#后缀”=>”,
“#tree”=>正确,
);
如果(!isset($form_state['values']['listar\u veics']['durth']))
$form['#durthil#veic']=1;
其他的
$form['#durthild_veic']=$form_state['values']['listar_veics']['durthild'];
$form['listar_veics']['durth']=数组(
“#键入”=>“选择”,
“#title”=>“Listar veículos da durth”,
“#选项”=>菲律宾元,
“#默认_值”=>$form['#子_-veic'],
“#ahah”=>数组(
“事件”=>“更改”,
'path'=>ahah\u helper\u path(数组('listar\u veics')),
“包装器”=>“listar veics包装器”,
'方法'=>'替换',
),
);
返回$表格;
} 
函数veiculos\u listar\u form\u submit($form,&$form\u state)
{
}
功能表
{
//生成$header和$data
$table=主题表($header,$data);
返回$table;
}
函数主题\u veiculos\u列表\u表单($form)
{
$output=drupal_render($form);
$DURRENT=$form['#DURRENT_veic'];
$output.='
'.$output.
'; $output.=\u listar\u veiculos\u tabela($); 返回$output; } 函数veiculos_theme(){ 返回数组( “veiculos_listar_form”=>数组( 'arguments'=>array('form'=>NULL),), ); }
在我这个小而天真的世界里,如果每次ahah事件(改变)都调用theme_hook,它应该会起作用

问题是,打印的变量总是相同的,就像用户选择的内容没有被存储一样。如果用户选择了不同的选项,则会显示新选项,但打印主题时,$变量始终相同

像这样:

有没有关于我能做些什么来完成这项工作的建议?我正在开发我们自己的模块,所以使用视图模块不是一个好主意


谢谢。

您应该用这种方式重新编写代码。 啊哈,我没有写,我想你不会有问题的。 查看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),),
    );
}
函数veiculos\u listar\u form($form\u state)
{
$form=array();
ahah_helper_register($form,$form_state);
//biulds$期权
//删除div,因为我们不想用ahah重新加载选择器
$form['listar_veics']=数组(
“#类型”=>“字段集”,
“#tree”=>正确,
);
如果(!isset($form_state['values']['listar\u veics']['durth']))
$form['#durthil#veic']=1;
其他的
$form['#durthild_veic']=$form_state['values']['listar_veics']['durthild'];
//在这里添加cover div,因为我们将重新加载表
$form['table']=数组(
“#前缀”=>”,
“#后缀”=>”,
“#键入”=>“标记”,
“#value”=>listar_veiculos_tabela($form[#durthild_veic')),
);
$form['listar_veics']['durth']=数组(
“#键入”=>“选择”,
“#title”=>“Listar veículos da durth”,
“#选项”=>菲律宾元,
“#默认_值”=>$form['#子_-veic'],
“#ahah”=>数组(
“事件”=>“更改”,
'path'=>ahah\u helper\u path(数组('listar\u veics')),
“包装器”=>“listar veics包装器”,
'方法'=>'替换',
),
);
返回$表格;
} 
函数veiculos\u listar\u form\u submit($form,&$form\u state)
{
}
功能表
{
//生成$header和$data
$table=主题表($header,$data);
返回$table;
}
函数主题\u veiculos\u列表\u表单($form)
{
$output=drupal_render($form);
返回$output;
}
函数veiculos_theme(){
返回数组(
“veiculos_listar_form”=>数组(
'arguments'=>array('form'=>NULL),),
);
}

这几乎是对的。如果我完全按照你说的做,页面将呈现两个选择。我要做的是把div放在字段集上,像以前一样从表中删除它,然后将表和insert插入到这个字段集中。如果不是这样设置的,将呈现两个选择,并且表不会对任何选择做出反应。现在没事了。我没有意识到FormsAPI有这种标记类型,太棒了。戈纳认为这是正确的答案,但它需要一些编辑。谢谢:D