Рейтинг:0

С тех пор я нашел несколько способов, которые работают, которые я опубликую в ответе, чтобы привлечь лучшие ответы, чем мои!

флаг jp

Создание файла из s3fs (корзина S3) прерывает миграцию

У меня есть два поля ссылки на термин: цвета и теги. У меня есть мак, у него есть теги: Симпатичная и цвета: , красный.

зеленый

Я хочу html как:

Этот цветок: зеленый, красивый, красный

  • т.е.

Я хочу взять термины из двух полей и объединить их в одну коллекцию.

Я пробовал в Twig:

Я начал в ветке. Я мог комбинировать термины, но не мог их сортировать.
{% set alltags = content.field_tags['items']|merge(content.field_colours['items']|keys|map(i => content.field_colours[i])) %} 
{{всетеги}}

Я пробовал в предварительном процессе Затем я перешел на PHP в mytheme_preprocess_node() функция. Я думал, что смогу украсть несколько цвета условия в рамках теги

 поле... Вроде добавил их в объект ОК, но ни один из цветных не выводился.
/** @var Drupal\Core\Field\EntityReferenceFieldItemList */
$colorsTags = $variables['content']['field_colors']['#items'] ?? НОЛЬ;
если ($colorsTags && $colorsTags->count()) {
  $tags = $variables['content']['field_tags']['#items'];
  foreach ($colorsTags as $item) {
    /** @var Drupal\Core\Field\Plugin\Field\FieldType\EntityReferenceItem $item */
    $tags->appendItem($item->getValue());
  }
}

Рейтинг:0
флаг jp

Я нашел пару способов добиться этого, опубликовав здесь, но я открыт для лучших/более чистых способов. Я особенно недоволен в своих ответах способом доступа к имени тега - кажется слишком сложным, пытаясь получить необработанное имя ?!

Оба блока кода живут в 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;

Потом в твиг {{поле_теги}}.

флаг cn
`$a['#taxonomy_term']->name->getValue()[0]['value']` можно сократить до `$a['#taxonomy_term']->label()`
флаг jp
@Clive, спасибо, я думал, что должен быть короткий путь!!

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.