ВопросСчетчик нод в табах quicktabs
Подскажите пожалуйста как можно вывести в табах quicktabs количество нод, которые находятся в них? Делаю views со стилем Quicktabs, группирую средствами quicktabs по термину таксономии. Вариант прямой выборки из базы количества нод по определенному термину таксономии не подходит, т.к. есть еще раскрытый фильтр и при его использовании количество пересчитывается не верно, т.е. он не учитывается при выборке. Может фильтр вьюшки как то можно учесть при выборе количества?
- Гость
- 21.12.2011
- 3496
Комментарии
Попробуйте в настройках вьюса указать настройки sql запроса - DISTINCT выборку. Плюс сделайте загрузку quicktabs на ajax, тогда она должна перезагружать данные с полученными результатами.
Дело в том, что я не знаю как получить именно счетчик количества материалов, которые находятся в закладке. Я получаю количество так:
print db_result(db_query("SELECT COUNT(*) FROM `term_node` tn JOIN `node` n on n.nid = tn.nid WHERE tn.tid = $data->term_data_tid and n.status = 1"));
но, при использовании фильтра по названию материала, например выбирается один материал - он в табе и отображается, остальные табы скрыты. Но мой счетчик показывает не 1, а именно количество всех материалов с данным термином таксономии. Как через PHP или по другому можно вывести количество материалов в табе в текущий момент?
Как вам такое решение?
Такой вариант не подходит. Он возвращает общее число материалов во вьюшке и с фильтром будет хорошо работать, но мне нужно то же самое, но сгруппированное по термину таксономии, чтобы на каждой вкладке отображался свой правильный счетчик с количеством материалов, которые именно в ней находятся. Кажется пришла мысль... может это нужно делать как то через аргументы?
Спасибо за ответы!
Тогда может вам поможет программное изменение запроса к бд во Views?
Да что в этом есть. Только не все понятно, подскажите, как правильно составить PHP блок чтобы получить количество материалов с определенным термином? т.е. нужно:
1) получить $query,
2) к нему добавить $query->add_where(1, 'tn.tid', $data->term_data_tid);
3) выполнить запрос и получить количество, типа так: print count(db_result(db_query($query)));
Вопрос - как получить $query для текущего views?
Чтобы получить $query вам просто надо в хуке hook_views_query_alter() написать:
Я делаю через модуль Customfield - через PHP-код. Вроде получилось так получить количество элементов возвращаемых query: print count($this->query);
Но вышло так что надо как то модифицировать запрос, т.к. для каждого элемента views возвращается 1, а должно для каждого возвращаться количество материалов помеченных тем же самым термином таксономии.
Большое спасибо за подсказку, буду дальше копать.
Благодарю за помощь! Все получилось.
Сделал так:
1. Получил значение раскрытого фильтра (title - название поля фильтра)
$filter_text = $this->view->exposed_data['title'];
2. Вставил его в запрос и получил правильное количество материалов с учетом фильтра
if ($filter_text) {
$result = db_result(db_query("SELECT COUNT(*) FROM `term_node` tn JOIN `node` n on n.nid = tn.nid WHERE tn.tid = $data->term_data_tid and n.status = 1 and UPPER(n.title) LIKE UPPER('%$filter_text%')"));
}
else {
$result = db_result(db_query("SELECT COUNT(*) FROM `term_node` tn JOIN `node` n on n.nid = tn.nid WHERE tn.tid = $data->term_data_tid and n.status = 1"));
}
print($result);
Супер!
Комментировать