Рейтинг:0

Найти значение другого поля в формате поля

флаг in

Это может быть сложно объяснить

У меня есть тип контента с field_1, field_2 и т. д.

field_1 — ссылка на таксономию

field_2 — это настраиваемое поле с различными дополнительными значениями.

У меня есть собственный форматтер для field_2, который делает все возможное, чтобы повесить подзначения в желаемый вывод, однако теперь у меня есть условие для определенного значения field_1, которое требует другого форматирования для field_2, которое не зависит на значения field_2.

Мне нужно средство форматирования, чтобы справиться с этим, поскольку поле потребуется в различных сценариях вывода (пользовательский модуль, представления, экспорт XML), и я не хочу создавать несколько механизмов для обработки данных.

Поэтому мой вопрос заключается в том, как я могу получить field_1 из средства форматирования field_2, чтобы я мог применить к нему логику условного формата.

Я мог бы изменить поле_2, чтобы оно содержало флаг для управления этим форматированием, однако есть > 20 тыс. записей для добавления значения, тогда как это 1 дополнительное поле в записи таксономии, где имеется менее 25 значений, это также позволит редактору установить флаг форматирования независимо от выбранной таксономии и, возможно, неправильно отображаемое значение. Я могу передавать значения форматировщику из кода пользовательского модуля, однако это необходимо применять, когда «обычный» пользователь создает свое собственное представление или другое возвращает поле в представление или страницу.

Надеюсь, это имеет смысл

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

Вы можете захватить сущность хоста внутри вашего форматировщика поля с помощью $items->getParent()->getEntity(), а затем запросите все остальные поля, например:

класс MyCustomFormatter расширяет FormatterBase {
  публичная функция viewElements (FieldItemListInterface $items, $langcode) {
    $parentEntity = $items->getParent()->getEntity();
    $otherFieldValue = $parentEntity->get('field_foo')->first()->getValue();
    foreach ($items as $delta => $item) {
      $elements[$delta] = your_custom_formatter_logic_here($otherFieldValue);
    }
    вернуть $элементы;
  }
}

Если вы запрашиваете здесь другие объекты, не забудьте объединить их в $elements[$delta]['#cache']['теги']

Alex Monaghan avatar
флаг in
Великолепно, это действительно полезно, и я догадался, что должен быть очень простой способ.

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

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