ฉันพบวิธีสองสามวิธีในการบรรลุผล โดยโพสต์ที่นี่ แต่ฉันเปิดรับวิธีที่ดีกว่า/สะอาดกว่า ฉันไม่พอใจกับคำตอบของฉันเป็นพิเศษเกี่ยวกับวิธีเข้าถึงชื่อแท็ก - ดูเหมือนจะซับซ้อนเกินไปในการพยายามรับชื่อดิบ!
บล็อกรหัสทั้งสองอยู่ในไฟล์ mytheme_preprocess_node()
:
คำตอบ 1: สร้างตัวแปรใหม่ที่มีแท็กทั้งหมดอยู่ในนั้น:
<?php
$allTags = [];
$addTags = function($fieldName) ใช้ (&$allTags, $ตัวแปร) {
ถ้า (isset($variables['content'][$fieldName])) {
foreach (\Drupal\Core\Render\Element::children($variables['content'][$fieldName]) เป็น $i) {
$allTags[]= $variables['content'][$fieldName][$i];
}
}
};
$addTags('field_colours');
$addTags('field_tags');
usort($allTags, ฟังก์ชัน ($a, $b) {
$tagA = $a['#taxonomy_term']->ชื่อ->getValue()[0]['value'];
$tagB = $b['#taxonomy_term']->ชื่อ->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($tag['#weight']);
unset($variables['content']['field_tags'][$i]);
$allTagsTemp[] = $แท็ก;
}
foreach (\Drupal\Core\Render\Element::children($variables['content']['field_colours']) เป็น $i) {
$tag = $variables['content']['field_colours'][$i];
unset($tag['#weight']);
unset($variables['content']['field_colours'][$i]);
$allTagsTemp[] = $แท็ก;
}
usort($allTagsTemp, ฟังก์ชัน ($a, $b) {
$tagA = $a['#taxonomy_term']->ชื่อ->getValue()[0]['value'];
$tagB = $b['#taxonomy_term']->ชื่อ->getValue()[0]['value'];
ส่งคืน strcasecmp($tagA, $tagB);
});
$variables['content']['field_tags'] += $allTagsTemp;
จากนั้นในทวิก {{ field_tags }}
.