2015-12-28 4 views
9

Я пытаюсь извлечь URL и Название значения в Link field в Drupal 8.Вывод Url & Title из поля ссылки в Drupal 8?

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

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

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

Когда я петля Повсеместно все мои узлы, чтобы предобработка вары я дам на мой взгляд, я хотел бы, чтобы получить 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 и Название из field_link.

Благодарим за помощь.

ответ

16

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

{{ 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 быть имя поля связи в вопросе.

+0

Я переопределил 'views-view-fields.html.twig', где я хочу извлечь часть' URL' из 'title' и назначить ее отдельной ссылке. Я попробовал два диких gueses: '{{fields.title.content.0 ['# url'}}}' и '{{fields.title.content ['# url'}}}'. Однако никто из них не работал :) Как я могу это сделать? –

+0

Я думаю, вам нужно '| render' поле, это работает для меня: '{{fields.title.content.0 ['# url'] | render}}', чтобы получить фактический URL-адрес – bdanin

5

Я просто нашел решение ...

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

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

+1

Как я могу получить URI с помощью синтаксиса Twig? –

+1

@FredK Для Twig: '$ partner.field_lien.uri' – Andrea

+3

+1, но как, черт возьми, вы достигаете этой информации? Есть ли документация в любом месте, где я могу найти список каждого атрибута для каждого типа поля. Например: link> uri/title/..., text> value? –

4

Просто контрейлерных на выше, если у вас есть внешние ссылки,

$node->field_name->uri 

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

use Drupal\Core\Url; 

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

Спасибо за ваш вклад. Фактически вы можете получить прямой url с ** $ node-> field_name-> entity-> url(); ** Надеюсь, что я вам помогу. –

0

Это один работает для меня веточку:

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

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

1

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

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

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

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

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

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

<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'] }}

0

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

{{ node.field_link.uri }} 

{{ node.field_link.title }}