开发者

Drupal form autocompleted with data from a database by ahah, how to do it?

开发者 https://www.devze.com 2023-01-21 11:12 出处:网络
I\'m trying to do it for hours now, and I just can\'t do it. What I want is: A radio or select drop-down with varying options (from the database). This part is ok, it\'s just a query and building th

I'm trying to do it for hours now, and I just can't do it.

What I want is:

A radio or select drop-down with varying options (from the database). This part is ok, it's just a query and building the options.

Then there are 3 text fields, each option from the above form has data for these 3 text fields.

When the user clicks/selects one of the options, i want to autocomplete the 3 text fields from the database. It's an edit feature, the user will select one option, and the 3 forms are completed with the current data, so the user can change them, and click submit to write the update to the database.

I'm using drupal 6 and the ahah_helper module.

I have this code, which is currently completing the textfields, but when I change the first 开发者_开发问答selection, it just won't update, not even the select value itself, it just comes back to the default, like it's not being setted or stored into the 'storage' from ahah_helper. I did this based on the ahah_helper_example, it can be (and probably is) totally wrong, I just started on drupal and forms.

function filiais_editar_form($form_state) {

//
// AHAH Helper stuff
//
$form = array();
ahah_helper_register($form, $form_state);


if (!isset($form_state['storage']['editar_filial']['filial']))
    $default_value = 1;
else 
    $default_value =  $form_state['storage']['editar_filial']['filial'];


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

$query_result = db_query("SELECT DISTINCT ON (cidade) cidade, id_filial 
                        FROM filial_pf");
$cidades = array();
while($row = db_fetch_object($query_result))
    $cidades[$row->id_filial] = $row->id_filial . ' : ' . $row->cidade;

$form['editar_filial']['filial'] = array(
    '#type'             => 'select',
    '#title'            => "Escolha a filial que deseja editar",
    '#options'          => $cidades,
    '#default_value'    => $default_value,
    '#ahah' => array(
        'event'   => 'change',
        'path'    => ahah_helper_path(array('editar_filial')),
        'wrapper' => 'editar-filial-wrapper',
    ),
);

$form['editar_filial']['update'] = array(
    '#type'  => 'submit',
    '#value' => "Atualizar Dados",
    '#submit' => array('ahah_helper_generic_submit'),
    '#attributes' => array('class' => 'no-js'),
  );

    //$fid = $form_state['storage']['editar_filial']['filial'];
    $fid = $default_value;


    $query_result = db_query("SELECT cidade, endereco, estado 
                            FROM filial_pf
                            WHERE id_filial = '%d'",                           $fid);
    $row = db_fetch_object($query_result);
    $cidade = $row->cidade;
    $estado = $row->estado;
    $endereco = $row->endereco;

    $form['editar_filial']['cidade'] = array(
        '#type' => 'textfield',
        '#title' => "Nova Cidade da Filial",
        '#size' => 18,
        '#maxlength' => 18,
        '#required' => TRUE,
        '#default_value' => $cidade,
    );

    $estados = array(
                 "AC" => "AC",
                 "AL" => "AL",
                 "AP" => "AP",
                 "AM" => "AM",
                 "BA" => "BA",
                 "CE" => "CE",
                 "DF" => "DF",
                 "ES" => "ES",
                 "GO" => "GO",
                 "MA" => "MA",
                 "MT" => "MT",
                 "MS" => "MS",
                 "MG" => "MG",
                 "PA" => "PA",
                 "PB" => "PB",
                 "PR" => "PR",
                 "PE" => "PE",
                 "PI" => "PI",
                 "RJ" => "RJ",
                 "RN" => "RN",
                 "RS" => "RS",
                 "RO" => "RO",
                 "RR" => "RR",
                 "SC" => "SC",
                 "SP" => "SP",
                 "SE" => "SE",
                 "TO" => "TO");



    $form['editar_filial']['estado'] = array(
        '#type' => 'select',
        '#title' => "Estado",
        '#options' => $estados,
        '#required' => TRUE,
        '#default_value' => $estado,
    );

    $form['editar_filial']['endereco'] = array(
        '#type' => 'textarea',
        '#title' => "Novo Endereço da Filial",
        '#size' => 70,
        '#maxlength' => 140,
        '#required' => TRUE,
        '#default_value' => $endereco,
    );


$form['editar_filial']['salvar'] = array(
  '#type' => 'submit',
  '#value' => "Salvar",
);

return $form; }


Made it work, found some nice examples here:

http://www.kristen.org/content/drupal-ahah-form-examples

And the code looks like this:

function filiais_editar_form($form_state) {

    //
    // AHAH Helper stuff
    //
    $form = array();
    ahah_helper_register($form, $form_state);


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

    $query_result = db_query("SELECT DISTINCT ON (cidade) cidade, id_filial 
                            FROM filial_pf");
    $cidades = array();
    while($row = db_fetch_object($query_result))
        $cidades[$row->id_filial] = $row->id_filial . ' : ' . $row->cidade;


    if (!isset($form_state['values']['editar']['filial']))
        $choice = 0;
    else 
        $choice = $form_state['values']['editar']['filial'];


    $form['editar']['filial'] = array(
        '#type'             => 'radios',
        '#title'            => "Escolha a filial que deseja editar",
        '#options'          => $cidades,
        '#default_value'    => $choice,
        '#ahah' => array(
            'event'     => 'change',
            'path'      => ahah_helper_path(array('editar')),
            'wrapper'   => 'editar-wrapper',
            'method'    => 'replace',
        ),
    );

    $fid = $choice;
    if($fid != 0)
    {
        $query_result = db_query("SELECT cidade, endereco, estado 
                                FROM filial_pf
                                WHERE id_filial = '%d'", $fid);
        $row = db_fetch_object($query_result);

        $cidade = $row->cidade;
        $estado = $row->estado;
        $endereco = $row->endereco;
    }
    else
    {
        $cidade = '';
        $estado = '';
        $endereco = '';
    }   
    $form['editar']['cidade'] = array(
        '#type' => 'textfield',
        '#title' => "Nova Cidade da Filial",
        '#size' => 18,
        '#maxlength' => 18,
        '#required' => TRUE,
        '#default_value' => $cidade,
    );

    $estados = array(
        "AC" => "AC",
        "AL" => "AL",
        "AP" => "AP",
        "AM" => "AM",
        "BA" => "BA",
        "CE" => "CE",
        "DF" => "DF",
        "ES" => "ES",
        "GO" => "GO",
        "MA" => "MA",
        "MT" => "MT",
        "MS" => "MS",
        "MG" => "MG",
        "PA" => "PA",
        "PB" => "PB",
        "PR" => "PR",
        "PE" => "PE",
        "PI" => "PI",
        "RJ" => "RJ",
        "RN" => "RN",
        "RS" => "RS",
        "RO" => "RO",
        "RR" => "RR",
        "SC" => "SC",
        "SP" => "SP",
        "SE" => "SE",
        "TO" => "TO");

    $form['editar']['estado'] = array(
        '#type' => 'select',
        '#title' => "Estado",
        '#options' => $estados,
        '#required' => TRUE,
        '#default_value' => $estado,
    );

    $form['editar']['endereco'] = array(
        '#type' => 'textarea',
        '#title' => "Novo Endereço da Filial",
        '#size' => 70,
        '#maxlength' => 140,
        '#required' => TRUE,
        '#default_value' => $endereco,
    );


    $form['editar']['salvar'] = array(
      '#type' => 'submit',
      '#value' => "Salvar",
    );

    $form['#redirect'] = '';

  return $form;
}
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号