ВопросСчетчик нод в табах quicktabs

Подскажите пожалуйста как можно вывести в табах quicktabs количество нод, которые находятся в них? Делаю views со стилем Quicktabs, группирую средствами quicktabs по термину таксономии. Вариант прямой выборки из базы количества нод по определенному термину таксономии не подходит, т.к. есть еще раскрытый фильтр и при его использовании количество пересчитывается не верно, т.е. он не учитывается при выборке. Может фильтр вьюшки как то можно учесть при выборе количества?

Комментарии

Аватар пользователя Spleshka
Spleshka написал:

Попробуйте в настройках вьюса указать настройки sql запроса - DISTINCT выборку. Плюс сделайте загрузку quicktabs на ajax, тогда она должна перезагружать данные с полученными результатами.

22.12.2011 14:37
Аватар пользователя Сергей
Сергей написал:

Дело в том, что я не знаю как получить именно счетчик количества материалов, которые находятся в закладке. Я получаю количество так:

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 или по другому можно вывести количество материалов в табе в текущий момент?

23.12.2011 09:46
Аватар пользователя Spleshka
Spleshka написал:
24.12.2011 16:13
Аватар пользователя Сергей
Сергей написал:

Такой вариант не подходит. Он возвращает общее число материалов во вьюшке и с фильтром будет хорошо работать, но мне нужно то же самое, но сгруппированное по термину таксономии, чтобы на каждой вкладке отображался свой правильный счетчик с количеством материалов, которые именно в ней находятся. Кажется пришла мысль... может это нужно делать как то через аргументы?
Спасибо за ответы!

26.12.2011 13:37
Аватар пользователя Spleshka
Spleshka написал:
26.12.2011 18:02
Аватар пользователя Сергей
Сергей написал:

Да что в этом есть. Только не все понятно, подскажите, как правильно составить PHP блок чтобы получить количество материалов с определенным термином? т.е. нужно:
1) получить $query,
2) к нему добавить $query->add_where(1, 'tn.tid', $data->term_data_tid);
3) выполнить запрос и получить количество, типа так: print count(db_result(db_query($query)));

Вопрос - как получить $query для текущего views?

26.12.2011 23:24
Аватар пользователя Spleshka
Spleshka написал:

Чтобы получить $query вам просто надо в хуке hook_views_query_alter() написать:

if ($view->name == 'ИМЯ_ВЬЮСА') {
  // Здесь будет $query вашего запроса
}
26.12.2011 23:28
Аватар пользователя Сергей
Сергей написал:

Я делаю через модуль Customfield - через PHP-код. Вроде получилось так получить количество элементов возвращаемых query: print count($this->query);
Но вышло так что надо как то модифицировать запрос, т.к. для каждого элемента views возвращается 1, а должно для каждого возвращаться количество материалов помеченных тем же самым термином таксономии.
Большое спасибо за подсказку, буду дальше копать.

26.12.2011 23:52
Аватар пользователя Сергей
Сергей написал:

Благодарю за помощь! Все получилось.
Сделал так:

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);

28.12.2011 00:12
Аватар пользователя Spleshka
Spleshka написал:

Супер!

28.12.2011 00:55

Комментировать