Здравствуйте, коллеги! Я всего два месяца в мире друпал, так что извините, если вопрос глупый.
У меня есть форма, состоящая из нескольких текстовых полей, пары drop-down списков и таблицы с пейджером. Когда я кликаю на пейджере для перехода к другой странице таблицы, происходит обычный get-запрос, и как следствие, очистка состояния всех полей и drop-down списков.
Хотелось бы, чтобы при переход на другую страницу таблицы выполнялся AJAX'ом, т.е. не сбрасывал состояния страницы. Подскажите, как такое устроить? Идей у меня пока только одна, но почти уверен, что нехорошая: для каждого линка в пейджере с помощью jQuery менять href на тот, который будет указывать на MENU_CALLBACK элемент меню. Он в свою очередь будет обрабатывать запрос и возвращать полную таблицу в виде JSON-объекта. Но тут не ясно, как получить сам контент.
В общем, буду рад подсказке, как такое реализовать по-человечески. Заранее спасибо!
P.S. Таблица с пейджером содержит список юзеров, при клике на которых, происходит их выбор. Эдакий multiple-choise интерфейс.
Вот примерный код, который использую сейчас:
// ...
$form['users']['table'] = array(
'#type' => 'markup',
'#prefix' => '<div id="users_list_div">',
'#value' => _module_name_data(),
'#suffix' => '</div>',
'#weight' => 1,
);
// ...
}
function _module_name_data() {
$pager_number = 0;
$query = 'SELECT * FROM {user} WHERE uid > 0';
$result = pager_query(db_rewrite_sql($query), 3, $pager_number);
$header = array();
$rows = array();
$index = 0;
while ($row = db_fetch_object($result)) {
$link_to_user = array();
$link_to_user['user'] = array(
'#tree' => TRUE,
);
$link_to_user['user']['hidden'] = array(
'#type' => 'hidden',
'#value' => $row->uid,
);
$link_to_user['user']['text'] = array(
'#type' => 'markup',
'#value' => '<span class="user_wrapper" style="text-decoration: underline; cursor: pointer;">' . $row->name . '</span>',
);
$rows[] = array(
drupal_render($link_to_user),
);
}
$table_markup_header = theme('pager', NULL, 10, $pager_number);
$table_markup = theme('table', $header, $rows, array());
return $table_markup_header . $table_markup;
}
Комментарии
Может что лучше и предложат, а пока я делаю так (помоему ты об этом и говоришь):
$('.pager > li > a').bind('click', function() {
var href = $(this).attr('href');
var page = '';
if (href.search(/([^\?]+)(\?page\=[0-9]+)/i) != -1) {
page = href.replace(/([^\?]+)(\?page\=[0-9]+)/i, "$2");
}
ajax_request(page); // делаем что хотим, меняем содержимое согласно выбранной страницы
return false;
});
}
Есть вариант лучше?
Здравствуйте
может я задачу не до конца понял, но возможно в данном случае поможет flag
он добавляет "флажок" к определённому материалу, а состояния флажков хранятся в сессии, притом для каждого пользователя в отдельности
если поддержка views, настройка прав, поддержка событий, счётчики нажатий и ещё много интересных функций
сам лично делал с помощью flag "корзину" для заказов, очень удобно, состояние флажка отображается и на странице материала и в списках с пейджером
off: и ещё есть хороший модуль views_flag_refresh, какраз для корзины подходит хорошо, он обновляет "вид" при изменении состояния флажка, если допустим мы хотим при отмене заказа одного из товаров чтобы он тут же исчез из списка