Я нашел пару способов добиться этого, опубликовав здесь, но я открыт для лучших/более чистых способов. Я особенно недоволен в своих ответах способом доступа к имени тега - кажется слишком сложным, пытаясь получить необработанное имя ?!
Оба блока кода живут в mytheme_preprocess_node()
:
Ответ 1: создайте новую переменную со всеми тегами в ней:
<?php
$ все теги = [];
$addTags = function($fieldName) use (&$allTags, $variables) {
если (isset($variables['content'][$fieldName])) {
foreach (\Drupal\Core\Render\Element::children($variables['content'][$fieldName]) as $i) {
$allTags[]= $variables['content'][$fieldName][$i];
}
}
};
$addTags('field_colors');
$addTags('field_tags');
usort($allTags, функция ($a, $b) {
$tagA = $a['#taxonomy_term']->name->getValue()[0]['value'];
$tagB = $b['#taxonomy_term']->name->getValue()[0]['value'];
вернуть strcasecmp($tagA, $tagB);
});
$variables['content']['allTags'] = $allTags;
Затем в Twig для шаблона узла: {{ все теги }}
.
Ответ 2: смешать теги из поля цвета с полем тегов в массиве рендеринга.
<?php
$allTagsTemp = [];
foreach (\Drupal\Core\Render\Element::children($variables['content']['field_tags']) как $i) {
$tag = $variables['content']['field_tags'][$i];
сбросить($тег['#вес']);
unset($variables['content']['field_tags'][$i]);
$allTagsTemp[] = $тег;
}
foreach (\Drupal\Core\Render\Element::children($variables['content']['field_colours']) как $i) {
$tag = $variables['content']['field_colors'][$i];
сбросить($тег['#вес']);
unset($variables['content']['field_colors'][$i]);
$allTagsTemp[] = $тег;
}
usort($allTagsTemp, функция ($a, $b) {
$tagA = $a['#taxonomy_term']->name->getValue()[0]['value'];
$tagB = $b['#taxonomy_term']->name->getValue()[0]['value'];
вернуть strcasecmp($tagA, $tagB);
});
$variables['content']['field_tags'] += $allTagsTemp;
Потом в твиг {{поле_теги}}
.