Добавление атрибутов в ссылку на загруженный файл
Меня попросили добавить target="_blank" к ссылкам, которые создаются, когда пользователь загружает файл на сайт Drupal 8.
Тип поля - "Файл". Допускается несколько загрузок.
Отладка Twig показывает мне, что поле создается основным шаблоном "файл-ссылка.html.twig". Все содержимое этого шаблона без комментариев:
<span{{ attributes }}>{{ link }}</span>
{% if file_size %}
{# @todo remove class before Drupal 9.0.0 #}
<span class="file-size">({{ file_size }})</span>
{% endif %}
Я перенес этот шаблон в свою пользовательскую тему и попытался добавить атрибут в ссылку. Я думал, что буду редактирование части {{ссылка}} шаблона, изменение ее для прикрепления атрибутов. Я сделал вариации этого:
{{ссылка (элемент.заголовок, элемент.url, атрибуты.setAttribute("цель","_blank')) }}
Каждый синтаксис, который я пробовал, приводил к фатальной ошибке PHP. Думая, что я неправильно использую синтаксис атрибутов, я проверил, просто попытавшись добавить один класс.
{{ link(item.title, item.url, { 'class': ['bananas'] }) }}
Это все еще был белый экран смерти, поэтому я думаю, что не могу использовать этот синтаксис в поле {{ссылка}} в моей ссылке на файл шаблон.
Я гуглил свои глазные яблоки из головы. Я нашел эту классную идею:
{% for item in items %}
{{ item.content|merge({'#attributes': {'class': ['button', 'button--arrow', 'button--centered']}}) }}
{% endfor %}
Поэтому я адаптировал его для своего шаблона field.html.twig вот так, изменив эту часть:
{% for item in items %}
<div{{ item.attributes }}>{{ item.content }}</div>
{% endfor %}
К этому:
{% for item in items %}
<div{{ item.attributes }}>{{ item.content|merge({'#attributes': {'target': ['_blank']}}) }}</div>
{% endfor %}
И хотя, по крайней мере, страница загрузилась и не имела фатальной ошибки, целевой атрибут не появился в ссылке.
Есть ли у кого-нибудь какие-либо советы, как мне добавить атрибут в ссылку для загрузки файла? Почти все, что я нашел, связано со ссылкой поле, а не поле загрузки файла. Спасибо, что уделили мне время.
1 answers
Файл-ссылка.html.веточка
<span{{ attributes }}>{{ link|merge({'#attributes': {'target': '_blank'}}) }}</span>
{% if file_size %}
{# @todo remove class before Drupal 9.0.0 #}
<span class="file-size">({{ file_size }})</span>
{% endif %}
В качестве альтернативы вы также можете решить эту проблему с помощью предварительной обработки.
Мифема.тема
/**
* Implements hook_preprocess_HOOK().
*/
function mytheme_preprocess_file_link(&$variables) {
$variables['link']['#url']->setOption('attributes', ['target' => '_blank']);
}