Добавляем к форме автосабмит с помощью Chaos Tools

Добавляем к форме автосабмит с помощью Chaos Tools.Автоматический сабмит формы - вещь довольно удобная в некоторых ситуациях. Например, если вам нужно по выбору опции из выпадающего списка сразу обновить страницу, не вынуждая пользователя при этом нажимать на кнопки. Причём кнопки (кнопку) можно даже скрыть, чтобы визуально минимизировать форму.

Довольно удобные инструменты по добавлению автосабмита имеются в модуле Chaos Tools. С ним Вам понадобится проделать всего три простых шага для получения результата.

 

Шаг первый

Добавляем js из ctools'a, который непосредственно выполняет сабмит формы при изменении нужного элемента:

ctools_add_js('auto-submit');

Шаг второй

Теперь надо определиться, при нажатии на какой элемент формы будет срабатывать автосабмит. Для этого, к элементу с формы добавляем вот такой аттрибут FAPI:

'#attributes' => array('class' => array('ctools-auto-submit')),

Пример для селекта:

$form['some_select'] = array(
  '#type' => 'select',
  '#title' => t('Select example'),
  '#options' => array(
    0 => t('First option'),
    1 => t('Second option'),
  ),
  '#attributes' => array('class' => array('ctools-auto-submit')),
);

Если же вы хотите, чтобы форма сабмитилась автоматически при изменении любого поля, то добавьте к форме вот такие параметры (в этом случае к элементам формы уже ничего вешать не надо):

'#attributes' => array('class' => array('ctools-auto-submit-full-form')),

Соответственно, код формы будет выглядеть как-то так:

$form['#attributes']['class'][] = 'ctools-auto-submit-full-form';

Шаг третий

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

'#attributes' => array('class' => array('ctools-auto-submit-click')),

Если кнопка обработана ajax'ом, то добавляется ещё один класс:

'#attributes' => array('class' => array('ctools-use-ajax', 'ctools-auto-submit-click')),

В итоге кнопка получается такой:

$form['submit'] = array(
  '#type' => 'submit',
  '#value' => t('Submit'),
  '#attributes' => array('class' => array('ctools-use-ajax', 'ctools-auto-submit-click')),
);

Всё, автосабмит готов.

Послесловие

Если вы разрабатываете модуль, то не забудьте добавить к нему зависимость от Chaos Tools:

name = Module name
description = Module description
core = 7.x
dependencies[] = ctools

На данный момент автоматический сабмит поддерживается для следующих элементов: select, radio, checkbox и textfield. В дальнейшем планируется добавить поддержку элементов из HTML5.