xandeadx.ru Блог музицирующего веб-девелопера

Drupal → Как при изменении раскрытых фильтров Views выводить число записей, подпадающих под фильтры (как на Яндекс.Маркете)

Опубликовано в

Фильтр на Яндекс.Маркете

Упрощённая версия скрипта, выводящая алерт при смене значений в раскрытой форме.

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));
}
Написанное актуально для Views 3
Похожие записи

Комментарии RSS

не совсем понятно.
А как оно пересчитывает количество позиций если мы не передаем никакие аргументы?

view их из $_GET берёт

drupal_add_library('system', 'drupal.ajax');
включать в настройках темы (для Javascript версии)?

нет

Я как то спрашивал про это. Спасибо что сделали решение!

Про контекстные фильтры хорошо бы упомянуть, в большинстве случаев каталоги делаются же в виде вьюхи с контекстным фильтром по термину таксономии. А в Вашем примере это не учитывается.
Так-то понятно что можно проанализировать системный путь полученный из реферера и подставить нужный аргумент во views.

$view->set_arguments(array(нужный_аргмуент));

а куда этот код пихать то???

Ответ: найди на странице ссылку с текстом: "Куда пихать твой чёртов код"! ;-)

Javascript:

(function ($) {
  // .....
})(jQuery);
// или так:
(function ($) {
  // .....
}(jQuery));
Как всё таки правильно? Меня частенько озадачивает данный вопрос! У вас чаще написан второй вариант, но и первый тоже работает. Но как то у меня вызвал ошибку...

Игорь - http://learn.javascript.ru/function-declaration-expression#функция-с-вызовом-на-месте

это понятно, проводил подобное, а куда js пихать? Подключал js по разному и через шаблон стр. и через файл темы и даже пытался подключить внутри модуля, но увы без полезно, не заработало..

Попробуйте так:

(function ($) {
  $('#id-раскрытой-формы input:checkbox').click(function(){
    $.getJSON('/get-view-total', $('#id-раскрытой-формы').serialize(), function (response) {
      alert('Total rows: ' + response.total);
    });
  });
})(jQuery);

путь от корня сайта - "/" - чаще всего так
можете вставить в своей теме
Ну и смотрите консоль - что там пишется в браузере.

Здрасти! думаю что дело не в 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

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании