У меня есть два 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()
не подходят потому что они отображают заголовки самих материалов.
Комментарии
Из кода непонятно, откуда у вас взялась $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']]; // Изменено.
}
...
?>