Tôi đã tìm thấy một số cách để đạt được nó, đăng ở đây, nhưng tôi sẵn sàng cho những cách tốt hơn/sạch sẽ hơn. Tôi đặc biệt không hài lòng với câu trả lời của mình về cách truy cập tên thẻ - có vẻ quá phức tạp khi cố gắng lấy tên thô?!
Cả hai khối mã sống trong một mytheme_pre process_node()
:
Trả lời 1: tạo một biến mới với tất cả các thẻ trong đó:
<?php
$allTags = [];
$addTags = function($fieldName) sử dụng (&$allTags, $variables) {
if (isset($variables['content'][$fieldName])) {
foreach (\Drupal\Core\Render\Element::children($variables['content'][$fieldName]) as $i) {
$allTags[]= $variables['content'][$fieldName][$i];
}
}
};
$addTags('trường_màu');
$addTags('field_tags');
usort($allTags, function ($a, $b) {
$tagA = $a['#taxonomy_term']->name->getValue()[0]['value'];
$tagB = $b['#taxonomy_term']->name->getValue()[0]['value'];
trả về strcasecmp($tagA, $tagB);
});
$variables['content']['allTags'] = $allTags;
Sau đó, trong Twig cho mẫu nút: {{ tất cả các thẻ }}
.
Trả lời 2: trộn các thẻ từ trường màu vào trường thẻ trong mảng kết xuất
<?php
$allTagsTemp = [];
foreach (\Drupal\Core\Render\Element::children($variables['content']['field_tags']) as $i) {
$tag = $variables['content']['field_tags'][$i];
bỏ đặt($tag['#weight']);
unset($variables['content']['field_tags'][$i]);
$allTagsTemp[] = $tag;
}
foreach (\Drupal\Core\Render\Element::children($variables['content']['field_colours']) as $i) {
$tag = $variables['content']['field_colors'][$i];
bỏ đặt($tag['#weight']);
unset($variables['content']['field_colors'][$i]);
$allTagsTemp[] = $tag;
}
usort($allTagsTemp, function ($a, $b) {
$tagA = $a['#taxonomy_term']->name->getValue()[0]['value'];
$tagB = $b['#taxonomy_term']->name->getValue()[0]['value'];
trả về strcasecmp($tagA, $tagB);
});
$variables['content']['field_tags'] += $allTagsTemp;
Sau đó trong cành cây {{ field_tags }}
.