Am găsit câteva modalități de a realiza asta, postând aici, dar sunt deschis către modalități mai bune/mai curate. Sunt mai ales nemulțumit de răspunsurile mele cu modul de a accesa numele etichetei - pare atât de complicat să încerci să obții numele brut?!
Ambele blocuri de cod trăiesc într-un mytheme_preprocess_node()
:
Răspunsul 1: creați o nouă variabilă cu toate etichetele din ea:
<?php
$allTags = [];
$addTags = function($fieldName) foloseste (&$allTags, $variables) {
if (isset($variables['conținut'][$fieldName])) {
foreach (\Drupal\Core\Render\Element::children($variables['conținut'][$fieldName]) ca $i) {
$allTags[]= $variables['conținut'][$fieldName][$i];
}
}
};
$addTags('câmp_culoare');
$addTags('field_tags');
usort($allTags, function ($a, $b) {
$tagA = $a['#taxonomy_term']->name->getValue()[0]['value'];
$tagB = $b['#taxonomy_term']->name->getValue()[0]['value'];
returnează strcasecmp($tagA, $tagB);
});
$variables['content']['allTags'] = $allTags;
Apoi, în Twig pentru șablonul de nod: {{ allTags }}
.
Răspunsul 2: amestecați etichetele din câmpul de culoare în câmpul de etichete din matricea de randare
<?php
$allTagsTemp = [];
foreach (\Drupal\Core\Render\Element::children($variables['content']['field_tags']) ca $i) {
$tag = $variables['conținut']['field_tags'][$i];
unset($tag['#greutate']);
unset($variables['conținut']['field_tags'][$i]);
$allTagsTemp[] = $etichetă;
}
foreach (\Drupal\Core\Render\Element::children($variables['content']['field_colours']) ca $i) {
$tag = $variables['conținut']['field_colours'][$i];
unset($tag['#greutate']);
unset($variables['conținut']['field_colours'][$i]);
$allTagsTemp[] = $etichetă;
}
usort($allTagsTemp, function ($a, $b) {
$tagA = $a['#taxonomy_term']->name->getValue()[0]['value'];
$tagB = $b['#taxonomy_term']->name->getValue()[0]['value'];
returnează strcasecmp($tagA, $tagB);
});
$variables['conținut']['field_tags'] += $allTagsTemp;
Apoi în Twig {{ field_tags }}
.