提取Url&;Drupal 8中链接字段的标题


Extract Url & Title from link field in Drupal 8?

我正在尝试检索Drupal 8中链接字段的URLTitle值。

在我的自定义控制器中,我用检索节点

$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
    );
}

不幸的是,我不知道如何检索URLfield_link标题

谢谢你的帮助。

在节点级别,在Twig模板中可以使用:

CCD_ 1&{{ 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'] }}

如果您想在字段模板而不是节点模板中执行此操作,请执行以下操作:

{% for item in items %}
  {{ item.content['#url'] }}
  {{ item.content['#title'] }}
{% endfor %}

或者,如果这不是一个多值字段,你可以这样做:

{{ items|first.content['#url'] }}
{{ items|first.content['#title'] }}

您可以直接在twitch模板中呈现链接字段的uri或文本。在节点的情况下,您可以在分支模板文件中使用以下任一项(假设链接字段的机器名为field_link):

{{ node.field_link.uri }}
{{ node.field_link.title }} 

这个在trick:中对我有用

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

*您应该在显示中使用:"Separate link text and URL"小部件

如果你是在预处理中完成的,我建议你的代码基于LinkSeparateFormatter.php。它展示了如何从链接字段中获取标题的想法。这里有一个方法。

use Drupal'Component'Utility'Unicode;
//...
$field_link = $entity->field_link->first();
$link_url = $field_link->getUrl();
$link_data = $field_link->toArray();
// If you want to truncate the url
$link_title = Unicode::truncate($link_url->toString(), 40, FALSE, TRUE);
if(!empty($link_data['title'])){
  // You could truncate here as well
  $link_title = $link_data['title'];
}
$variables['content'] = [
  '#type' => 'link',
  '#url' => $link_url,
  '#title' => $link_title,
];

我正在为ECK字段进行链接分离,这个解决方案真的帮助了我

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

获取网址:
{{ entity.field_link[0]['#url'] }}

获取链接标题:
{{ entity.field_link[0]['#title'] }}

渲染块后,如果您想访问其中使用的链接字段,则可以在节点预处理挂钩内使用$render['field_target_url']['#items']->uri。

如果您试图在视图字段中获取URL,还有一种方法是添加另一个字段Path:Content