Как отобразить на странице названия двух Content types и их количество, которое есть на сайте?

Аватар пользователя towi towi 30 июня в 1:33

У меня есть два content types(nodes) на сайте Blog и FAQ. Мне нужно отображать название content type и справа от него количество контента даного типа на сайте, вот так:

Blog Results 35
FAQ Results 2

Чтобы реализовать это я написал такой код:

<?php
$search_result 
$search_query->execute();

$rows = [];
foreach (
$search_result->getResultItems() as $item) {
    
$rows[$node->bundle()]['count'] += 1;
}

$build = [];

foreach (

$rows as $key => $row) {
  
$build[] = ['#markup' => $row['count']];
}

return 

$build;?>

Но сейчас у меня на странице отображается:

352

Я слышал, что зная машинное имя ноды, я могу получить его имя. Blog имеет машинное имя blog, а FAQ имеет машинное имя static_pages.

Что добавить или изменить во втором foreach, чтобы отображались названия этих типов материалов и их количество на странице с переносом на другую строку?

После первого `foreach` я получаю:
$rows = ['blog' => ['count' => 35], 'static_pages' => ['count' => 2]];

Методы $node->labels() или $node->getTitle() не подходят потому что они отображают заголовки самих материалов.

Лучший ответ

Аватар пользователя OldWarrior OldWarrior 30 июня в 19:43
1

Из кода непонятно, откуда у вас взялась $node, но вообще как-то так:

<?php
...
foreach (
$search_result->getResultItems() as $item) {
    
$rows[$node->bundle()]['label'] = $node->type->entity->label(); // Добавлено.
    
$rows[$node->bundle()]['count'] += 1;
}

$build = [];

foreach (

$rows as $key => $row) {
  
$build[] = ['#markup' => $row['label'] . ': ' $row['count']]; // Изменено.

...
?>

Комментарии

Аватар пользователя OldWarrior OldWarrior 30 июня в 19:43
1

Из кода непонятно, откуда у вас взялась $node, но вообще как-то так:

<?php
...
foreach (
$search_result->getResultItems() as $item) {
    
$rows[$node->bundle()]['label'] = $node->type->entity->label(); // Добавлено.
    
$rows[$node->bundle()]['count'] += 1;
}

$build = [];

foreach (

$rows as $key => $row) {
  
$build[] = ['#markup' => $row['label'] . ': ' $row['count']]; // Изменено.

...
?>