Форма Drupal, автоматически заполняемая данными из базы данных, ахах, как это сделать? - PullRequest
0 голосов
/ 21 октября 2010

Я пытаюсь делать это часами, и я просто не могу это сделать.

То, что я хочу, это:

Радио или выберите раскрывающийся список с различными вариантами(из базы данных).С этой частью все в порядке, это всего лишь запрос и построение параметров.

Затем есть 3 текстовых поля, каждая опция из приведенной выше формы имеет данные для этих 3 текстовых полей.

Когда пользовательнажимает / выбирает один из вариантов, я хочу автоматически заполнить 3 текстовых поля из базы данных.Это функция редактирования, пользователь выберет один вариант, и 3 формы будут заполнены текущими данными, поэтому пользователь может их изменить и нажать кнопку отправить, чтобы записать обновление в базу данных.

I'mиспользуя drupal 6 и модуль ahah_helper.

У меня есть этот код, который в настоящее время заполняет текстовые поля, но когда я изменяю первый выбор, он просто не обновляется, даже само значение выбора, он простовозвращается к значению по умолчанию, как будто оно не устанавливается и не сохраняется в хранилище из ahah_helper.Я сделал это на основе ahah_helper_example, это может быть (и, вероятно, так) совершенно неправильно, я только начал работать с drupal и формами.

</p> <p>function filiais_editar_form($form_state) {</p> <pre><code>// // 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;}

1 Ответ

0 голосов
/ 21 октября 2010

Сделал это, нашел несколько хороших примеров здесь:

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;
}
...