Извлечение Url & Title из поля ссылки в Drupal 8?

Я пытаюсь получить URL-адресом и заголовок значения a ссылке поле на Drupal 8.

в моем пользовательском контроллере я получаю узлы с:

$storage = Drupal::entityManager()->getStorage('node');
$nids = $storage->getQuery()
    ->condition('type', 'partners')
    ->condition('status', 1)
    ->execute();

$partners = $storage->loadMultiple($nids);

когда я петлю через все мои узлы, для предварительной обработки vars я дам моему виду, я хотел бы получить URL-адресом и заголовок.

foreach ($partners as $key => $partner) {
    $variables['partners'][] = array(
        'image' => $partner->field_logo->entity->url(),
        'url'   => $partner->field_link->value, // Can't retrieve values of link field
    );
}

к сожалению, я не нашел как получить URL-адресом и заголовок of field_link.

Спасибо за вашу помощь.

7 ответов


на уровне узла внутри шаблона веточки вы можете использовать:

{{ content.field_link.0['#url'] }} & {{ content.field_link.0['#title'] }}

например:

<a href="{{ content.field_link.0['#url'] }}">{{ content.field_link.0['#title'] }}</a>

field_link имя поля ссылки, о котором идет речь.


Я только что нашел решение ...

$partner->field_lien->uri // The url
$partner->field_lien->title // The title

мой плохой, надеюсь, что это может помочь кому-то.


просто чтобы вернуться к вышесказанному, если у вас есть внешняя ссылка,

$node->field_name->uri

даст вам URL, но если это внутренний, вам может потребоваться настроить немного больше:

use Drupal\Core\Url;

$mylink = Url::fromUri($node->field_name[0]->uri);
$mylink->toString();

обновлено для Drupal 8

чтобы получить url, все, что вам нужно сделать, это:

{{ content.field_link_name[0]['#url'] }}

получить текст ссылки:

{{ content.field_link_name[0]['#title'] }}

вы можете отобразить uri или текст поля ссылки непосредственно в шаблоне веточки. В случае узла вы можете использовать любое из следующих действий в файле шаблона twig (предполагается, что имя компьютера вашего поля ссылки field_link):

{{ node.field_link.uri }}

{{ node.field_link.title }} 

это работает для меня в twig:

content.field_link_name.0['#title']        // title
content.field_link_name.0['#url_title']    // url value

*вы должны использовать: "отдельный текст ссылки и URL" виджет на дисплее


Я делаю это разделение ссылок для полей ECK, и это решение действительно помогло мне. Я обновил код для полей ECK для применения встроенного стиля в файле twig следующим образом:

<a style="color: {{ entity.field_link_color[0] }};" href="{{ entity.field_link[0]['#url'] }}"> {{ entity.field_link[0]['#title'] }} </a>

чтобы получить url:
{{ entity.field_link[0]['#url'] }}

получить название ссылки:
{{ entity.field_link[0]['#title'] }}