Drupal модуль функции темы с ахах - PullRequest
0 голосов
/ 06 ноября 2010

Мой главный вопрос:

Вызывается ли функция theme_hook () всякий раз, когда форма перестраивается через ahah (ahah_helper)?

Я пытаюсь показать окно выбора снекоторые параметры фильтрации, когда пользователь меняет его, таблица ниже тоже меняется.

У меня есть это сейчас:

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

Любое предложение о том, что я мог бы сделать, чтобы сделать эту работу?Я разрабатываю наш собственный модуль, поэтому использование модуля представлений не очень хорошая идея.

Спасибо.

1 Ответ

1 голос
/ 06 ноября 2010

Вы должны повторить код таким образом.Ахах колбэк я не написал, думаю у вас не было бы проблем с этим.Посмотрите несколько примеров на 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),),
    );
}
...