代码之家  ›  专栏  ›  技术社区  ›  hfingler Jim Puls

Drupal表单是由ahah用数据库中的数据自动完成的,怎么做?

  •  0
  • hfingler Jim Puls  · 技术社区  · 15 年前

    我已经试了好几个小时了,就是做不到。

    我想要的是:

    带有不同选项的单选或选择下拉列表(来自数据库)。这部分没问题,只是一个查询和构建选项。

    当用户单击/选择其中一个选项时,我希望自动完成数据库中的3个文本字段。这是一个编辑功能,用户将选择一个选项,3个表单将使用当前数据完成,因此用户可以更改它们,然后单击提交将更新写入数据库。

    我正在使用drupal 6和ahah_helper模块。

    函数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",
    );
    

    }

    1 回复  |  直到 15 年前
        1
  •  0
  •   Sk8erPeter miku    14 年前

    成功了,在这里找到了一些很好的例子:

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

    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;
    }
    
    推荐文章