提取网址& Drupal 8中链接字段的标题?

时间:2015-12-28 19:32:34

标签: php drupal drupal-8

我正在尝试在 Drupal 8 中检索Link field网址标题值。

在我的自定义控制器中,我使用:

检索节点
$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
    );
}

很遗憾,我没有找到如何检索 field_link 网址标题

感谢您的帮助。

11 个答案:

答案 0 :(得分:25)

在节点级别,您可以使用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是相关链接字段的名称。

答案 1 :(得分:9)

我刚刚找到解决方案......

AttributeError: 'DataFrame' object has no attribute 'sort_values'

我的坏,希望它可以帮助别人。

答案 2 :(得分:8)

如果您有外部链接,只需捎带上面,

$node->field_name->uri

会为您提供网址,但如果它是内部网址,您可能需要稍微调整一下:

use Drupal\Core\Url;

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

答案 3 :(得分:2)

您可以直接在树枝模板中渲染链接字段的uri或文本。对于节点,您可以在树枝模板文件中使用以下任一项(假设链接字段的计算机名称为field_link):

{{ node.field_link.uri }}

{{ node.field_link.title }} 

答案 4 :(得分:2)

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

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

或者,如果这不是多值字段,则可以改为:

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

答案 5 :(得分:1)

更新了Drupal 8

要获取网址,您需要做的就是:

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

获取链接文字:

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

答案 6 :(得分:0)

这个在树枝上适合我:

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

*您应该使用:“显示

中的单独的链接文本和URL”小部件

答案 7 :(得分:0)

我正在为ECK字段进行此链接分离,这个解决方案对我有帮助。我更新了ECK字段的代码,以便在twig文件中应用内联样式,如下所示:

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

答案 8 :(得分:0)

渲染一个块后,如果要访问其中使用的链接字段,则可以在节点预处理钩子内部使用类似$ render ['field_target_url'] ['#items']-> uri的

答案 9 :(得分:0)

如果尝试获取“视图字段”中的URL,另一种方法是添加另一个字段“路径:内容”

答案 10 :(得分:0)

如果要在预处理中进行操作,建议您将代码基于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,
];