Как получить действительный URL-адрес поля Link из шаблона Twig?

У меня есть поле 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 valid ?

Например, если 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 }}, но я бы не стал писать функцию препроцесса каждый раз, когда у меня есть поле ссылки.

23 голоса | спросил Andrea 26 PMpTue, 26 Apr 2016 14:23:32 +030023Tuesday 2016, 14:23:32

5 ответов


28

Ваш PHP из вашего последнего редактирования переводится в twig следующим образом:

{{ node.field_my_link.0.url }}

Это работает так, 0 возвращает первый элемент списка элементов поля, url получает объект url и потому, что ветка будет использовать этот объект в качестве строки, это будет вызовите магический метод toString () и выведете url как строковое значение.

Вам нужно всего лишь использовать url, потому что twig автоматически ищет метод getxyz(), если нет свойства с этим именем xyz .

ответил 4k4 26 PMpTue, 26 Apr 2016 14:39:26 +030039Tuesday 2016, 14:39:26
10

Вы можете получить доступ к элементу массива рендеринга напрямую, в вашем случае:

{{ node.field_my_link[0]['#url'] }}
ответил Tim 22 +03002016-10-22T09:02:55+03:00312016bEurope/MoscowSat, 22 Oct 2016 09:02:55 +0300 2016, 09:02:55
8

Я должен был сделать это в поле «Ссылка» в блоке. Это сработало хорошо:

{{ content.field_my_link[0]['#url']|render }}
ответил cbovard 2 Mayam17 2017, 00:38:06
5

Вы должны учитывать оба случая: внешние и внутренние URL-адреса.

Сначала давайте проверим, является ли URL внешним и просто распечатайте его *.uri.

Если это внутренний , мы должны связать имя и параметры маршрута через Drupal path($name, $parameters, $options) .

{% if node.field_link.0.url.external %}
  <a href="{{ node.field_link.uri }}">
    {{ node.field_link.title }}
  </a>
{% else %}
  <a href="{{ path(node.field_link.0.url.routeName, node.field_link.0.url.routeParameters) }}">
    {{ node.field_link.title }}
  </a>
{% endif %}
ответил leymannx 11 +03002017-10-11T16:59:33+03:00312017bEurope/MoscowWed, 11 Oct 2017 16:59:33 +0300 2017, 16:59:33
1

Я тестировал как внешний, так и внутренний URL, используя, как показано ниже, он работает по желанию.

<a href="{{ content.field_my_link[0]['#url'] }}" class="button buy-now-btn">{{ content.field_my_link[0]['#title'] }}</a>
ответил leymannx 11 +03002017-10-11T16:59:33+03:00312017bEurope/MoscowWed, 11 Oct 2017 16:59:33 +0300 2017, 16:59:33

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132