Comments 15
'#value' => t('Отправить.'),
В функцию t() нужно подставлять текст для перевода на английском языке
Да и вообще у вас весь код не правильный и подход изначально не тот. Почитайте про модуль ctools, который берет на себя всю работу с формой.
В функцию t() нужно подставлять текст для перевода на английском языке
Да и вообще у вас весь код не правильный и подход изначально не тот. Почитайте про модуль ctools, который берет на себя всю работу с формой.
+3
> '#value' => t('Отправить.'),
> В функцию t() нужно подставлять текст для перевода на английском языке
спасибо, поправил. с англ. переписывал для примера.
>Почитайте про модуль ctools, который берет на себя всю работу с формой.
можно будет глянуть.
> В функцию t() нужно подставлять текст для перевода на английском языке
спасибо, поправил. с англ. переписывал для примера.
>Почитайте про модуль ctools, который берет на себя всю работу с формой.
можно будет глянуть.
0
Нормальный подход. Необязательно делать один попап для одного модуля с помощью CTools (в котором 1000 других вещей), ограничелся практически стандартными возможностями.
Только exit(); там?
Только exit(); там?
0
Автор спасибо за труд и вклад в drupal :) Я кстати попробую твой модуль вписать в свой проект, у нас пока Flag as Offensive, но заказчик давно просил что-то подобное.
0
Таки посмотрите ctools на примере, как вариант, модуля ajax login/register. Он небольшой, там просто разобраться. Ну и вот тут небольшие примеры.
+1
* Вместо
*
* simple_ajax_popup() — В корне неверный подход к работе с формами. Используйте стандартный
exit()
в друпале нужно использовать drupal_exit()
*
'access callback' => TRUE,
— зло. Объявите свой permission или используйте стандартный access content
* simple_ajax_popup() — В корне неверный подход к работе с формами. Используйте стандартный
#ajax
из Forms API, тогда отработают стандартный валидатор и сабмит формы, она ребилднется и вернет нужную информацию.0
> 'access callback' => TRUE, — зло.
это всего лишь пример.
> simple_ajax_popup() — В корне неверный подход к работе с формами. Используйте стандартный #ajax из Forms API, тогда отработают стандартный валидатор и сабмит формы, она ребилднется и вернет нужную информацию.
Для моего случая когда формы изначально нет на странице, это почему то не срабатывает. Функция определенная в #ajax не вызывается. Если знаете в чем проблема — буду рад узнать.
это всего лишь пример.
> simple_ajax_popup() — В корне неверный подход к работе с формами. Используйте стандартный #ajax из Forms API, тогда отработают стандартный валидатор и сабмит формы, она ребилднется и вернет нужную информацию.
Для моего случая когда формы изначально нет на странице, это почему то не срабатывает. Функция определенная в #ajax не вызывается. Если знаете в чем проблема — буду рад узнать.
0
> 'access callback' => TRUE, — зло.
это всего лишь пример.
Кто-то поймет, что это только пример и сделает правильно, но большинство тупо скопирует.
Для моего случая когда формы изначально нет на странице, это почему то не срабатывает. Функция определенная в #ajax не вызывается. Если знаете в чем проблема — буду рад узнать.
Я не стал заморачиваться с fancybox, сделал просто пример, где форма получается аяксом и обрабатывается аяксом. Код не претендует, но логика должна быть понятна.
Вот рабочий пример
Модуль
test.js
function test_menu() {
$items = array();
$items['test'] = array(
'type' => MENU_SUGGESTED_ITEM,
'title' => t('Test page'),
'page callback' => 'test_page',
'access arguments' => array('access content'),
);
$items['callback'] = array(
'type' => MENU_CALLBACK,
'page callback' => 'test_callback',
'access arguments' => array('access content'),
);
return $items;
}
function test_page() {
drupal_add_js('misc/jquery.form.js');
drupal_add_js(drupal_get_path('module', 'test') . '/test.js');
$output = '<div id="form"></div>';
return $output . l(t('Get form'), 'callback', array('attributes' => array('id' => 'test-link')));
}
function test_callback() {
print drupal_render(drupal_get_form('test_form'));
drupal_exit();
}
function test_form($form, $form_state) {
$form = array();
$form['aass'] = array(
'#theme' => 'status_messages'
);
$form['messages'] = array(
'#markup' => '',
);
$form['name'] = array(
'#title' => t('Name'),
'#type' => 'textfield',
'#default_value' => '',
'#required' => TRUE,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
);
return $form;
}
function test_form_validate(&$form, &$form_state) {}
function test_form_submit($form, &$form_state) {
$form_state['rebuild'] = TRUE;
drupal_set_message(t('Ok. All good!'));
}
test.js
(function($) {
$(document).ready(function() {
var success = function() {
$('#test-form').ajaxForm({
target: '#form',
success: success
});
};
$('#test-link').click(function(event) {
$.get(Drupal.settings.basePath + 'callback', function(data) {
$('#form').html(data);
Drupal.attachBehaviors('#test-form');
success();
});
event.preventDefault();
});
});
})(jQuery);
0
Все делается проще:
в hook_form_alter добавляем для сабмита нужной формы свойство '#ajax', где указываем callback-функцию, враппер и метод. В callback-е просто возвращаем array('#type' => 'ajax', '#commands' => $commands) или html-код;
в hook_form_alter добавляем для сабмита нужной формы свойство '#ajax', где указываем callback-функцию, враппер и метод. В callback-е просто возвращаем array('#type' => 'ajax', '#commands' => $commands) или html-код;
0
Хм…, парсер, какашка, теги трет. Не вставилось: pastebin.com/nupf5dFm.
0
Обновил код и исходники.
0
Sign up to leave a comment.
Загрузка и отправка формы по AJAX на Drupal 7