Знаю, что существует несколько решений, где выводятся ВСЕ термины избранного словаря с подсчетом количество материалов в них. Но нигде не нашел способа, как вывести количество материалов лишь одного избранного термина. Думаю для людей, понимающих код друпала - это совсем несложная задача и здесь не нужен какой-либо дополнительный модуль.
Комментарии
А пятёрку чего не отметил?
А вывести можно вот так:
Добавил пятёрку, но код заставить заработать пока не смог. Насчет контекста я рассматриваю пока простейший вариант, чтобы можно было вставить код в нужном месте страницы (что-то типа сниппета).
На данный момент тестю в денвере и имею категорию с таким адресом taxonomy/term/1 и одной заметкой в ней. Создал страничку, с поддержкой php и вставил слегка адаптированный код, предложенный RxB:
<?php print taxonomy_term_count_nodes($tid, $type = 1); ?>
На выходе получаю 0. Что сделал не так?
print taxonomy_term_count_nodes(1);
Теперь считает и хорошая новость состоит в том, что заметки снятые с публикации не учитываются. Но плохая в том, что считаются материалы не только с избранного термина, но походу, и со всех его дочерних категорий. Их можно как-то отсечь при подсчете?
эта функция считает все материалы вместе с дочерними
подсчитать можно элементарно с помощью Sql запроса
Я понимаю, что для умельцев может и элементарно, потому и решил спросить. Мне нужно посчитать не для себя, а так чтобы скрипт выводил и это видели все. Предложенное решение - половинчатое и годится только для тех сайтов, где нет дочерних категорий. Мне нужно другое более полное решение, которое в итоге возможно пригодится не только мне. Я не видел, чтобы эта тема ещё где-то раскрывалась.
попробуй так
$count = db_result(db_query("SELECT COUNT(*) FROM {term_node} tn WHERE tn.tid = %d", $tid));
print $count;
слишком элементарное и очевидное решение потому что
то есть подсчет количества нод для терминов включая дочерние термины нужен только для сайтов, где нет дочерних терминов?
ты имеешь ввиду добавить алиас таблицы tn.tid? в данном случае без разницы
<?php$tid = 1;
$count = db_result(db_query("SELECT COUNT(*) FROM {term_node} tn WHERE tn.tid = %d", $tid));
print $count;?>
Ну да, сейчас правильно считает, но теперь проблема с неопубликованными материалами - они тоже учитываются, что весьма сбивает с толку.
Если имеется ввиду первый вариант, то думаю, да. Мне, например, трудно представить зачем кому-то выводить заведомо неправильное количество материалов на сайте. Потому что если мы имеем один материал, а прописан он матрешкой в трех терминах, мы и получаем на выходе 3, что не является правдой.
добавьте join c таблицей node и условие по status
$status = 1;
$count = db_result(db_query("SELECT COUNT(*) FROM {term_node} tn INNER JOIN {node} n ON tn.nid = n.nid WHERE tn.tid = %d AND n.status = %d", $tid, $status));
print $count;
drupby, большое спасибо! Теперь отлично все работает! По крайней мере в тех тестах что я провел. Неопубликованные и дочерние термины не учитываются.
И я так понимаю
$tid - это номер термина
$status - состояние публикации, где 1 - опубликовано, 0 - не опубликовано.
правильно - это можно и без комментариев в коде понять опытным путем