Вы здесь

Проблема при обработки кнопки в модальном ctools окне

2

Здравствуйте! Возникла такая ситуация: имеется модальное окно, построенное на ctools. Строилось по примеру http://www.drupaler.by/lessons/ctool-modal-api-rabota-s-modalnymi-oknami. Дело в том, что при нажатии кнопки в форме модального окна, окно просто закрывается и ничего не происходит. Как это исправить? как сделать так, чтобы при нажатии на кнопку в модальном окне появилось хотя бы сообщение и окно можно самостоятельно закрыть. По примеру я создавала собственную форму.

Версия Drupal: 
7.x
Категория: 
AJAXForm API
Связанные проекты: 
Chaos tool suite (ctools)
Вопрос задан 21.03.2015 - 21:11

Без кода трудно что то сказать. Хотя бы page callback и функция формы.

Комментарий оставлен 21.03.2015 - 21:28

вот код:

function ajax_publish_form($form, $form_state){
  $form = array();
  $form['ball'] = array(
    '#type' => 'textfield',
    '#title' => t('Оценка (в баллах)'),
    '#size' => 10,
  );
  $form['gruppa'] = array(
    '#type' => 'select',
    '#title' => t('Указать группу'),
    '#options' => array('1ПМ','1ИС','1БИ','1ИБ','2ПМ','2ИС','2БИ','2ИБ',),
  );
  $form['actions'] = array('#type' => 'actions');
  $form['actions']['subm'] = array(
    '#type' => 'submit',
    '#value' => t('Выполнить'),
    '#id' => 'in_base',
  );
  return $form;
}

function ajax_publish_form_validate($form, &$form_state) {
  if (empty($form_state['values']['ball'])) {
    form_set_error('ball', t('Отсутствие данных'));
  }
}

function ajax_publish_form_submit($form, $form_state){
  drupal_set_message(t('Your message has been sent.'));
}

Форма в модальном окне отображается. Функция валидации работает. А вот как обработать кнопку? По нажатию окно просто закрывается

Комментарий оставлен 21.03.2015 - 22:00

Ответы

2

в page_callback убираем строку

$commands[] = ctools_modal_command_dismiss();

и потом меняем строку

$commands[] = ajax_command_html('#messages-wrapper', theme('status_messages'));

на

$commands[] = ajax_command_prepend('#modal-content', theme('status_messages'));
Ответ дан 21.03.2015 - 21:56
Аватар пользователя drupby
drupby
456

А что значит эта строка:

ajax_command_prepend('#modal-content', theme('status_messages')); ?

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

Комментарий оставлен 21.03.2015 - 22:05

А что значит эта строка:
ajax_command_prepend('#modal-content', theme('status_messages')); ?

Выведет сообщение в модальном окне

Я прописывала эти действия в submit-функции

Все действия в сабмит функции должны были выполниться

и еще нужно бы прочитать http://xandeadx.ru/blog/drupal/315 по поводу параметров
и в функцию t() не стоит передавать кириллические строки, чтобы не плодить бесполезные записи в таблице locales_source

поле с оценкой лучше описать так

$form['ball'] = array(
  '#type' => 'textfield',
  '#title' => 'Оценка (в баллах)',
  '#size' => 10,
  '#required' => TRUE,
  '#element_validate' => array('element_validate_integer_positive'),
);
Комментарий оставлен 21.03.2015 - 22:10

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

Значит неправильно запрос построили. Проверяйте.

Комментарий оставлен 22.03.2015 - 03:36

То есть кнопку в форме модального окна все-таки можно обработать submit - функцией? Можете показать, что например, прописать в submit-функции, чтобы добавить данные в базу данных?

Комментарий оставлен 22.03.2015 - 14:59

Вот пример http://drupalguide.ru/articles/database-api-drupal-7-vstavka-dannyh-v-ta...
Там используется db_insert() для вставки новой записи в таблицу, если нужно обновить существующую запись, то используется db_update(), либо же как вариант функция db_merge(), которая создаст новую запись, если та еще не существует, либо же обновит существующую.

Комментарий оставлен 22.03.2015 - 18:42

Спасибо! А функция submit, описанная в примере подходит для обработки кнопки модального окна?

Комментарий оставлен 22.03.2015 - 18:46

Спасибо! А функция submit, описанная в примере подходит для обработки кнопки модального окна?

Да, только естественно нужно параметром в функцию db_insert() передать имя нужной таблицы и перечислить необходимые поля и их значения

Комментарий оставлен 22.03.2015 - 18:51