Количество узлов по типу

Я ищу фрагмент, который позволяет мне отображать общий счетчик для определенного типа узла, например. «Страницы = 167» или «Продукты = 10630».

Какой код следует использовать для достижения этого?

38 голосов | спросил Diane 21 12011vEurope/Moscow11bEurope/MoscowMon, 21 Nov 2011 23:46:37 +0400 2011, 23:46:37

9 ответов


32

Вот функция, которая возвращает количество узлов для определенного типа контента:

function yourtheme_get_node_count ($ content_type) {
     $ query = "SELECT COUNT (*) FROM {node} n".
              "WHERE n.type =: type";
     $ total = db_query ($ query, array (': type' => $ content_type)) -> fetchField ();
     return $ total;
}

Чтобы использовать этот код в своей теме, добавьте функцию в свой шаблон.php, а затем вы можете вызвать такую ​​функцию:

echo 'Pages:'. YOURTHEME_get_node_count ( 'страница');
echo 'Products:'. YOURTHEME_get_node_count ( 'продукт');

Надеюсь, что это поможет.

ответил Cyclonecode 22 22011vEurope/Moscow11bEurope/MoscowTue, 22 Nov 2011 00:02:38 +0400 2011, 00:02:38
52

Для этого вы можете использовать модуль Views .

  1. Создайте новое представление, удалите параметры сортировки, поля и другие настройки по умолчанию.
  2. Добавить поле для «Содержимое: Тип»
  3. Разверните «расширенную» часть справа и установите «Использовать агрегацию» в «Да»
  4. Добавить еще одно поле для «Содержимое: Тип»
  5. Во втором поле «Содержимое: Тип» нажмите «Настройки агрегирования»
  6. Задайте тип агрегации «count»
  7. Второй «Content: Type» теперь должен выглядеть как «COUNT (Content: Type)»

Это должно быть! При необходимости настройте еще несколько параметров, таких как метки полей и настройки стиля строки.

Вот экспорт такого вида, поэтому вы можете легко импортировать его и попробовать:

$ view = новый вид;
$ view-> name = 'nodecounts';
$ view-> description = '';
$ view-> tag = 'default';
$ view-> base_table = 'node';
$ view-> human_name = 'Node counts';
$ view-> core = 7;
$ view-> api_version = '3.0';
$ view-> disabled = FALSE; /* Отредактируйте это значение true, чтобы сначала отключить представление по умолчанию * /

/* Дисплей: Master * /
$ handler = $ view-> new_display ('default', 'Master', 'default');
$ handler-> display-> display_options ['title'] = 'Node counts';
$ handler-> display-> display_options ['group_by'] = TRUE;
$ handler-> display-> display_options ['access'] ['type'] = 'perm';
$ handler-> display-> display_options ['cache'] ['type'] = 'none';
$ handler-> display-> display_options ['query'] ['type'] = 'views_query';
$ handler-> display-> display_options ['query'] ['options'] ['query_comment'] = FALSE;
$ handler-> display-> display_options ['exposure_form'] ['type'] = 'basic';
$ handler-> display-> display_options ['pager'] ['type'] = 'none';
$ handler-> display-> display_options ['style_plugin'] = 'default';
$ handler-> display-> display_options ['row_plugin'] = 'fields';
$ handler-> display-> display_options ['row_options'] ['inline'] = массив (
  'type_1' => 'Тип 1',
  'type' => 'тип',
);
$ handler-> display-> display_options ['row_options'] ['separator'] = ':';
$ handler-> display-> display_options ['row_options'] ['hide_empty'] = 0;
$ handler-> display-> display_options ['row_options'] ['default_field_elements'] = 1;
/* Поле: Содержание: Тип * /
$ handler-> display-> display_options ['fields'] ['type_1'] ['id'] = 'type_1';
$ handler-> display-> display_options ['fields'] ['type_1'] ['table'] = 'node';
$ handler-> display-> display_options ['fields'] ['type_1'] ['field'] = 'type';
$ handler-> display-> display_options ['fields'] ['type_1'] ['label'] = '';
$ handler-> display-> display_options ['fields'] ['type_1'] ['alter'] ['alter_text'] = 0;
$ handler-> display-> display_options ['fields'] ['type_1'] ['alter'] ['make_link'] = 0;
$ handler-> display-> display_options ['fields'] ['type_1'] ['alter'] ['absolute'] = 0;
$ handler-> display-> display_options ['fields'] ['type_1'] ['alter'] ['external'] = 0;
$ handler-> display-> display_options ['fields'] ['type_1'] ['alter'] ['replace_spaces'] = 0;
$ handler-> display-> display_options ['fields'] ['type_1'] ['alter'] ['trim_whitespace'] = 0;
$ handler-> display-> display_options ['fields'] ['type_1'] ['alter'] ['nl2br'] = 0;
$ handler-> display-> display_options ['fields'] ['type_1'] ['alter'] ['word_boundary'] = 1;
$ handler-> display-> display_options ['fields'] ['type_1'] ['alter'] ['ellipsis'] = 1;
$ handler-> display-> display_options ['fields'] ['type_1'] ['alter'] ['strip_tags'] = 0;
$ handler-> display-> display_options ['fields'] ['type_1'] ['alter'] ['trim'] = 0;
$ handler-> display-> display_options ['fields'] ['type_1'] ['alter'] ['html'] = 0;
$ handler-> display-> display_options ['fields'] ['type_1'] ['element_label_colon'] = FALSE;
$ handler-> display-> display_options ['fields'] ['type_1'] ['element_default_classes'] = 1;
$ handler-> display-> display_options ['fields'] ['type_1'] ['hide_empty'] = 0;
$ handler-> display-> display_options ['fields'] ['type_1'] ['empty_zero'] = 0;
$ handler-> display-> display_options ['fields'] ['type_1'] ['hide_alter_empty'] = 1;
$ handler-> display-> display_options ['fields'] ['type_1'] ['link_to_node'] = 0;
$ handler-> display-> display_options ['fields'] ['type_1'] ['machine_name'] = 0;
/* Поле: COUNT (Содержимое: Тип) * /
$ handler-> display-> display_options ['fields'] ['type'] ['id'] = 'type';
$ handler-> display-> display_options ['fields'] ['type'] ['table'] = 'node';
$ handler-> display-> display_options ['fields'] ['type'] ['field'] = 'type';
$ handler-> display-> display_options ['fields'] ['type'] ['group_type'] = 'count';
$ handler-> display-> display_options ['fields'] ['type'] ['label'] = '';
$ handler-> display-> display_options ['fields'] ['type'] ['alter'] ['alter_text'] = 0;
$ handler-> display-> display_options ['fields'] ['type'] ['alter'] ['make_link'] = 0;
$ handler-> display-> display_options ['fields'] ['type'] ['alter'] ['absolute'] =0;
$ handler-> display-> display_options ['fields'] ['type'] ['alter'] ['external'] = 0;
$ handler-> display-> display_options ['fields'] ['type'] ['alter'] ['replace_spaces'] = 0;
$ handler-> display-> display_options ['fields'] ['type'] ['alter'] ['trim_whitespace'] = 0;
$ handler-> display-> display_options ['fields'] ['type'] ['alter'] ['nl2br'] = 0;
$ handler-> display-> display_options ['fields'] ['type'] ['alter'] ['word_boundary'] = 1;
$ handler-> display-> display_options ['fields'] ['type'] ['alter'] ['ellipsis'] = 1;
$ handler-> display-> display_options ['fields'] ['type'] ['alter'] ['strip_tags'] = 0;
$ handler-> display-> display_options ['fields'] ['type'] ['alter'] ['trim'] = 0;
$ handler-> display-> display_options ['fields'] ['type'] ['alter'] ['html'] = 0;
$ handler-> display-> display_options ['fields'] ['type'] ['element_label_colon'] = FALSE;
$ handler-> display-> display_options ['fields'] ['type'] ['element_default_classes'] = 1;
$ handler-> display-> display_options ['fields'] ['type'] ['hide_empty'] = 0;
$ handler-> display-> display_options ['fields'] ['type'] ['empty_zero'] = 0;
$ handler-> display-> display_options ['fields'] ['type'] ['hide_alter_empty'] = 1;
$ handler-> display-> display_options ['fields'] ['type'] ['separator'] = '';
$ handler-> display-> display_options ['fields'] ['type'] ['format_plural'] = 0;

/* Дисплей: Блок * /
$ handler = $ view-> new_display ('block', 'Block', 'block');
ответил marcvangend 22 22011vEurope/Moscow11bEurope/MoscowTue, 22 Nov 2011 00:31:53 +0400 2011, 00:31:53
9

Предпочтительным программным способом является использование Класс EntityFieldQuery . Узнайте, почему EntityFieldQuery превосходит db_query () .

Вот пример подсчета узлов типа Blog.

$ query = new EntityFieldQuery ();

$ query-> entityCondition ('entity_type', 'node') //захватывать узлы
-> entityCondition ('bundle', 'blog') //фильтр по типу блога
-> свойствоCondition ('status', 1) //фильтровать по опубликованным
- > кол-(); //подсчитываем

$ result = $ query-> execute ();

См. аналогичный вопрос .

ответил timofey 12 22013vEurope/Moscow11bEurope/MoscowTue, 12 Nov 2013 08:06:35 +0400 2013, 08:06:35
6

Я сделал это с помощью EntityFieldQuery.

$ query = new EntityFieldQuery ();
$ query-> entityCondition ('entity_type', 'node')
    /* это имя машины типа содержимого * /
    -> entityCondition ('bundle', 'product')
    /* Вы можете установить дополнительные свойства с помощью поляCondition и свойств с помощью свойстваCondition * /
    -> fieldCondition ('field_product_status', 'tid', key (taxonomy_get_term_by_name ('New')))
    ;

$ result = $ query-> execute ();
if (isset ($ result ['node'])) {
    $ count_of_new_product_nodes = count ($ result ['node']);
}
ответил Coomie 8 42012vEurope/Moscow11bEurope/MoscowThu, 08 Nov 2012 10:18:51 +0400 2012, 10:18:51
5

Использование Drush прост и быстр.

drush sqlq 'выберите count (node.nid) как node_count, node_type.type из узла inner join node_type на node.type = node_type.type group by node_type.type'

Это дает результат, похожий на:

node_count type
17 category_2012
20 category_2013
19 category_2014
3 конкурса
19 entry_2012_breakthrough
89 entry_2012_digitalother
50 entry_2012_directdirect
19 entry_2012_filmsecscn
17 entry_2012_insights
12 entry_2012_outdoor
31 entry_2012_promo
19 entry_2013_breakthrough
100 entry_2013_digitalother
40 entry_2013_directdirect

И если вам нужен фильтр определенного типа, просто используйте grep следующим образом:

drush sqlq 'выберите count (node.nid) как node_count, node_type.type из узла inner join node_type на node.type = node_type.type group by node_type.type' | grep 2014
ответил Patoshi パトシ 23 rdEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 23 Sep 2015 19:37:48 +0300 2015, 19:37:48
3

Для любого, кто заинтересован, другим решением является использование countQuery метода SelectQuery (через ответил tomcant 21 42013vEurope/Moscow11bEurope/MoscowThu, 21 Nov 2013 17:36:12 +0400 2013, 17:36:12

1
SELECT
  COUNT ({node} .nid) AS node_count,
  {} NODE_TYPE .type
FROM {node}
  INNER JOIN {node_type} ON {node} .type = {node_type} .type
GROUP BY {node_type} .type;

Используйте этот запрос в своем коде

ответил Adi 8 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 08 Sep 2015 09:00:17 +0300 2015, 09:00:17
0

Модуль Node Type count делает то же самое, что вам нужно.

  

Этот модуль используется для отображения количества узлов определенного типа содержимого   а также количество пользователей определенного типа роли.

     

Этот модуль будет использоваться только для статистических и dev-целей.

ответил DEVARAJ JOHNSON 28 PM00000050000002231 2015, 17:22:22
0

В качестве варианта ответа об использовании модуля Views вы можете «использовать», представление, которое поставляется с модулем Charts . Просто установите /включите его, не требуйте дополнительной настройки, кодирования и т. Д. Более подробная информация об этом представлении приведена в Примеры из коробки (quote по этой ссылке):

  

... перейдите к chart /examples /views на вашем сайте. Вам следует   затем см. диаграмму столбцов и круговую диаграмму, за которой следует   табличный дисплей также. Обе диаграммы и отображение таблицы содержат данные   об общем количестве узлов для каждого доступного контента   типы.

Примечания:

  • В качестве бонуса, помимо табличного формата, вы также получаете диаграмму для визуализации количества узлов по типу контента.
  • Если вам нравится представление и /или оно близко к тому, что вы хотите, вы также можете клонировать представление, а затем просто отключите модуль диаграмм еще раз.

Раскрытие информации: я являюсь сторонником этого модуля,
Надеюсь, это не нарушит политику сайта по саморекламе .

ответил Pierre.Vriens 12 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSat, 12 Sep 2015 14:08:51 +0300 2015, 14:08:51

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132