Попытка оптимизировать код для вывода значения на основе нескольких / различных условий

В основном у меня есть условие if else, которое проверяет тип сущности узла и выводит значение на основе условия. Как видно из кода ниже, если entity type является press_release это выводит Press Release на разметке и если entity type является interview, это выводит Interview,

Проблема в том, что если существует несколько условий, становится трудно поддерживать их, есть ли способ сократить их?

{% for newsdesk in accordion.entity.field_newsdesk_and_press %}

{% if article.entity.getType == 'press_release' %}

<a href="#" class="tag-label">Press Release</a>

{% endif %}


{% if article.entity.getType == 'interview' %}

<a href="#" class="tag-label">interview</a>

{% endif %}

{% endfor %}

3

Решение

Дело в том, page.html.twig вероятно, это второй худший шаблон для такого рода вещей (возглавляемый html.html.twig и затем node.html.twig). Вместо этого вам лучше сделать это на уровне поля.

Шаблонные предложения

Но прежде всего очень важно, чтобы вы включили отладку Twig. Просто следуйте: Отладка шаблонов Twig. Отныне вы будете получать предложения шаблона, напечатанные в виде комментариев HTML в вашей разметке. Смотрите пример выходных данных для поля body моего типа контента Article:

<!-- THEME DEBUG -->
<!-- THEME HOOK: 'field' -->
<!-- FILE NAME SUGGESTIONS:
* field--node--body--article.html.twig
* field--node--body.html.twig
* field--node--article.html.twig
* field--body.html.twig
x field--text-with-summary.html.twig
* field.html.twig
-->
<!-- BEGIN OUTPUT from 'core/themes/classy/templates/field/field--text-with-summary.html.twig' -->

<div property="schema:text" data-quickedit-field-id="node/1/body/en/teaser" class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item quickedit-field"><p>Elitphas sellus laoreet consequa laoreetc maecenas aesent iam ras fames. Volutpat sacras feugiatm hendre lacusp esent quamsusp uada netus. Duinulla sque teger justop justov metiam. Uisque vestibu tcras pretium llam lum llam. Consec ctetur llaut necinte magnap vel proin. Justo teger sedinteg vulput ligula arcu litora telluss eger. Roin massan quamnull nibh vitaenu sduis felis rproin ndisse. Ipsumves nullap teger mussed condim sacras.</p></div>

<!-- END OUTPUT from 'core/themes/classy/templates/field/field--text-with-summary.html.twig' -->

Немного x перед перечисленными шаблонами указывает, какие шаблоны используются в данный момент. И только поверх фактического поля вывода выводится относительный путь на вашем жестком диске к текущему файлу шаблона. Теперь вы можете пойти, скопировать этот шаблон, вставить его в тему templatesи переименуйте его в одном из прокомментированных предложений. Вероятно, настолько четко, насколько это возможно.

Так что в вашем случае это будет:

  • field--node--field-newsdesk-and-press--press-release.html.twig
  • field--node--field-newsdesk-and-press--interview.html.twig

А внутри вы редактируете разметку под свои нужды. С помощью hook_theme_suggestions_HOOK_alter Существующие предложения шаблона также могут быть легко расширены для соблюдения режима просмотра.


Тем не менее, это не идеальное решение по моему собственному мнению (хотя это широко сделано таким образом). Управление большим количеством шаблонов может стать очень быстрым. Плюс: фактический пользовательский интерфейс поля в серверной части становится все более и более бесполезным.

Я бы рекомендовал вместо этого программно создать два псевдополя, которые просто можно поместить в настройки управления отображением каждого типа узла. Или сделать это полностью внутри функций предварительной обработки, опять же программно. Но это выйдет далеко за рамки вашего вопроса и его лучше задавать отдельно, если вы сами этого не сделаете.

2

Другие решения

С учетом вашего примера я могу предложить следующее:

{% for newsdesk in accordion.entity.field_newsdesk_and_press %}
<a href="#" class="tag-label">{{ article.entity.getType|humanize|title }}</a>
{% endfor %}
2

По вопросам рекламы [email protected]