Дано - ноды с полем EAV Field.
Задача - вывести сравнительную таблицу характеристик некоторых нод:
Решение:
$nodes = Node::loadMultiple([1, 2, 3]);
$table_build = [
'#theme' => 'table',
'#header' => [],
'#rows' => [],
];
// Collect used eav attributes
$eav_attributes = []; /** @var EavAttributeInterface[] $eav_attributes */
foreach ($nodes as $node) {
/** @var EavItemInterface $eav_field_item */
foreach ($node->get('field_attributes') as $eav_field_item) {
if ($eav_attribute = $eav_field_item->getValueEntity()->getAttributeEntity()) {
$eav_attributes[$eav_attribute->id()] = $eav_attribute;
}
}
}
// Build header
$table_build['#header'][] = '';
foreach ($nodes as $nid => $node) {
$table_build['#header'][$nid] = $node->label();
}
// Build first column
foreach ($eav_attributes as $eav_attribute_id => $eav_attribute) {
$table_build['#rows'][$eav_attribute_id][0] = $eav_attribute->label();
}
// Build other columns
foreach ($nodes as $nid => $node) {
// Set blank values
foreach ($eav_attributes as $eav_attribute_id => $eav_attribute) {
$table_build['#rows'][$eav_attribute_id][$nid] = '';
}
// Set real values
/** @var EavItemInterface $eav_field_item */
foreach ($node->get('field_attributes') as $eav_field_item) {
$eav_value = $eav_field_item->getValueEntity();
if ($eav_attribute = $eav_value->getAttributeEntity()) {
$table_build['#rows'][$eav_attribute->id()][$nid] = $eav_value->viewValueField();
}
}
}
Написанное актуально для
EAV Field 2.x
Похожие записи
- Добавляем на страницу управления отображением материала поля "Заголовок" и "Дата создания"
- Добавляем на страницу управления отображением комментария поля "автор" и "дата создания"
- Расширить сторонний форматтер своим функционалом
- Тест оверхеда Layout Builder и Paragraphs
- Темизация группы чекбоксов или радио-кнопок (#type=>checkboxes, #type=>radios)
Добавить комментарий