Упрощённая версия скрипта, выводящая алерт при смене значений в раскрытой форме.
Javascript:
(function ($) {
Drupal.behaviors.modulename = {
attach: function (context, settings) {
$('#id-раскрытой-формы', context).once('ajax-total').change(function () {
$.getJSON(settings.basePath + 'get-view-total', $(this).serialize(), function (response) {
alert('Total rows: ' + response.total);
});
});
}
};
})(jQuery);
PHP:
/**
* Implements hook_menu().
*/
function modulename_menu() {
$items = array();
$items['get-view-total'] = array(
'page callback' => 'modulename_view_total_callback',
'access arguments' => array('access content'),
);
return $items;
}
/**
* Menu callback.
*/
function modulename_view_total_callback() {
$view = views_get_view('имя_представления');
$view->set_display('имя_дисплея');
$view->pre_execute();
$view->execute();
drupal_json_output(array('total' => $view->total_rows));
}
Написанное актуально для
Drupal 7, Views 3
Комментарии
не совсем понятно.
А как оно пересчитывает количество позиций если мы не передаем никакие аргументы?
view их из $_GET берёт
drupal_add_library('system', 'drupal.ajax');
включать в настройках темы (для Javascript версии)?
нет
Я как то спрашивал про это. Спасибо что сделали решение!
Про контекстные фильтры хорошо бы упомянуть, в большинстве случаев каталоги делаются же в виде вьюхи с контекстным фильтром по термину таксономии. А в Вашем примере это не учитывается.
Так-то понятно что можно проанализировать системный путь полученный из реферера и подставить нужный аргумент во views.
Javascript:
Как всё таки правильно? Меня частенько озадачивает данный вопрос! У вас чаще написан второй вариант, но и первый тоже работает. Но как то у меня вызвал ошибку...
Игорь - http://learn.javascript.ru/function-declaration-expression#функция-с-вы…
это понятно, проводил подобное, а куда js пихать? Подключал js по разному и через шаблон стр. и через файл темы и даже пытался подключить внутри модуля, но увы без полезно, не заработало..
Попробуйте так:
путь от корня сайта - "/" - чаще всего так
можете вставить в своей теме
Ну и смотрите консоль - что там пишется в браузере.
Здрасти! думаю что дело не в js, ни чего не выходит, что здесь /get-view-total должно быть? Остается как есть или что?
вот моя форма http://m.flaggr.ru/kategoriya/tualetnaya-voda
Что я делаю не так
Гость - Напиши мне r--r [ кошка ] list.ru
Понять ajax - это не так просто, чужой.
Важно понимать сам принцип:
1. Настроить функцию PHP - проверить что она точно работает "/devel/php"
2. Настроить данные javascript, удобно через jQuery: что это за данные.
3. Проверить оправляются ли они на сервер. Что отправляем.
4. Идти от минимума к максимуму: Что то работает, идет дальше. Сразу сделать не получится.
Я сделал такой код за день. Светить ссылку не хочу - в личку дам посмотреть.
а вот щас можешь глянуть походу получилось
Опять я )) функция и модуль работает, а вот как теперь это вывести как на я.маркете всплывающем окошком не знаю, тоисть окошко выводится, но оно стандартное из браузера, подскажите кто нить пожалуйста!
Мне больше всего так понравилось - http://qtip2.com/demos
Привет!
У меня не работало по примеру, пока не поменял строку:
на:
А вообще спасибище Xandeadx, без этой статьи вообще не решил бы эту задачу.
И, если можно, отпишитесь правильно ли я исправил код, или как то можно ещё лучше?
Проверял с помощью print_r($view->total_rows) - > пустота. А без исправлений в alert выдавало: "total: null"
Скажите, а возможно такой же счетчик использовать с аджакс фильтрами (без перезагрузки страницы)? Я пробую ваше решение, но консоль говорит jquery.min.js?v=3.5.1:2 GET site.ru/node/undefinedget-view-total?field_perf_value%5Bmax%5D=&f_rekup=All 404 (Not Found)
Добавить комментарий