2013-11-21 4 views
0

Добрый день. Я создал пользовательскую форму в моем модуле и определили кнопку отправки, как это:Drupal ajax форма, частичная визуализация

$form['submit'] = array(
    '#type' => 'submit', 
    '#value' => t('Save'), 
    '#ajax' => array(
     'callback' => 'fmg_addbanner_ajax_callback', 
     'method' => 'replace', 
     'wrapper' => 'banner_add_wrapper' 
    ) 
); 

Затем выводимый мою форму, как это:

$form = drupal_get_form('fmg_banner_add_form', $region_id); 
print render($form); 

Но AJAX запросы не работают. Я думаю, из-за отсутствия необходимых файлов drupal js. Как я могу решить эту проблему? Благодарю.

+0

Не могли бы вы добавить свое полное определение формы и реализацию 'fmg_addbanner_ajax_callback', таким образом мы сможем помочь вам ... –

ответ

0

Нормальный случай будет иметь #ajax прикрепленное к общему входу, как флажок, текстовое поле и т.д.

поведение является то, что, когда пользователь изменит значение входного сигнала, он будет стрелять ваш обратный вызов через AJAX и отправьте всю форму поверх, а затем вы можете обработать эту форму за сценой и отрегулировать определенные вещи перед отправкой формы назад и изменить элемент на указанную оболочку.

Один из вопросов, который у меня был для частичной визуализации формы, - это когда мне нужно выполнить какой-либо вызов ajax или ввести частичный элемент формы в определенную область страницы, сохраняя целостность рендеринга формы. (Я не знаю точно, что форма сборка сделала, я думаю, я не хочу знать)

Поскольку форма рендеринг использует визуализируемый массив, если вы просто хотите, чтобы извлечь определенный элемент, вы можете просто сделать

$form = drupal_get_form('application_form'); 
$body = render($form['body']); 

Ниже приведен реальный пример того, что я принял форму и разделил ее на заголовок, нижний колонтитул и остальные элементы формы.

// get a form for updating application info. 
$form = drupal_get_form('pgh_awards_review_application_form', $app); 
$elements = array(); 
$form_render = render($form); 
$elements = array(
    'qualify' => render($form['qualify']), 
    'threshold_met' => render($form['threshold_met']), 
    'submit' => render($form['submit']), 
); 
if (preg_match('/<form.+div>/', $form_render, $matches)) { 
    $elements['header'] = $matches[0]; 
} 
if (preg_match('/<input type="hidden".+form>/s', $form_render, $matches)) { 
    $elements['footer'] = $matches[0]; 
} 
$vars['form'] = $elements; 

Это определенно не очень подходит, он просто служит потребностям на данный момент.

Смежные вопросы