У меня есть поле Link с именем field_my_link
(имя машины).
В шаблоне Twig я могу получить значение URL ссылки с помощью этого:
{{ node.field_my_link.uri }}
Если внутри URL-адреса ссылки есть внешний URL-адрес, например, http://example.com
он работает хорошо.
Но если внутри URL-адреса ссылки хранится внутренний URL-адрес, например "/node/11"
, я получаю значение, подобное этому:
"internal:/node/11"
с internal:
префиксом " ".
Как я могу получить действительный URL?
Например, если URL-адрес ссылки " http://example.com
" Я хочу " http://example.com
" (это уже работает), если URL-адрес ссылки " /node/11
" Я хочу относительный URL-адрес " /node/11
", если URL-адрес ссылки " <front>
" Я хочу URL-адрес " /
" и т. Д. ,
РЕДАКТИРОВАТЬ
Я могу получить желаемое значение в функции предварительной обработки PHP, используя это:
$url = $variables['node']->get('field_my_link')->first()->getUrl();
Как я могу получить доступ к тому же значению в шаблоне Twig?
Я знаю, что могу сделать это с помощью функции препроцессора:
$variables['my_url'] = $url;
Затем получите доступ к URL-адресу в Twig с помощью {{ my_url }}
, но я бы избегал писать функцию предварительной обработки каждый раз, когда у меня есть поле ссылки.
источник
node.field_my_link.uri
внешний URL-адрес похожhttp://www.example.com
?file_url(node.field_my_link.uri)
, и еслиnode.field_my_link.uri
это"http://www.example.com"
работает (он оставляет URL без изменений), но еслиnode.field_my_link.uri
это"internal:/"
функция возвращает"/internal%3A/"
(а"/"
) ..node.field_my_link.entity.uri.value
возвращает нулевое значение. Есть еще идеи?Вы можете получить доступ к элементу массива рендеринга напрямую, в вашем случае:
источник
Вы должны охватить оба случая: внешние и внутренние URL.
Сначала давайте проверим, является ли URL внешним и просто распечатаем его
*.uri
.Иначе, если он внутренний, мы должны связать его имя и параметры маршрута с помощью
path($name, $parameters, $options)
функции Drupal .источник
{% set url = path(node.field_link.0.url.routeName, node.field_link.0.url.routeParameters) %}
затем я могу создать пользовательскую ссылку: `<a href="{{ url }}" class="mycustomclass">custom link text</a>
Предварительная обработка не требуется и не нужно проходить через content.field_link, поэтому не нужно ничего делать в «Управление отображением» для поля ссылки, чтобы получить URL.Я должен был сделать это на поле ссылок в блоке. Это сработало хорошо:
источник
{{ content.field_my_link[0]['#url'] }}
без рендера , так как в шаблоне ветки массив рендеринга автоматически отображается при печати.Я знаю, что это старый пост, но с последней версией Drupal 8 (8.6) вы можете напрямую отобразить URL для обеих версий (внешней и внутренней):
И если вам нужно знать, является ли ссылка внешней или нет (в моем случае это была цель), вы можете использовать это:
Пример:
источник
Вы также можете использовать что-то вроде следующего, все зависит от типа извлекаемого объекта и имени поля. В моем случае это был абзац с полем с именем field_link и сработало следующее:
источник