从 Drupal 8 中的 link 字段中提取 Url 和标题?
Extract Url & Title from link field in Drupal 8?
我正在尝试检索 URL 和 Link field 中的 Title 值=31=]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.
感谢您的帮助。
我刚找到解决方案...
$partner->field_lien->uri // The url
$partner->field_lien->title // The title
我的不好,希望对大家有所帮助。
如果你有一个外部的 link,
$node->field_name->uri
会给你 URL,但如果它是内部的,你可能需要再做一些调整:
use Drupal\Core\Url;
$mylink = Url::fromUri($node->field_name[0]->uri);
$mylink->toString();
在节点级别,在您的 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
是相关 link 字段的名称。
这个在树枝上对我有用:
content.field_link_name.0['#title'] // title
content.field_link_name.0['#url_title'] // url value
*您应该使用:"Separate link text and URL" 显示中的小部件
针对 Drupal 8 进行了更新
要获得 url,您需要做的就是:
{{ content.field_link_name[0]['#url'] }}
要获取 link 文本:
{{ content.field_link_name[0]['#title'] }}
我正在对 ECK 字段进行 link 分离,这个解决方案对我很有帮助。我已经更新了 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'] }}
要获得 link 标题:
{{ entity.field_link[0]['#title'] }}
您可以直接在 twig 模板中呈现 link 字段的 uri 或文本。对于节点,您可以在 twig 模板文件中使用以下任一选项(假设 link 字段的机器名称是 field_link
):
{{ node.field_link.uri }}
{{ node.field_link.title }}
渲染块后,如果你想访问其中使用的 link 字段,那么你可以像这样使用 $render['field_target_url']['#items']->uri inside node预处理挂钩。
另一种方法是添加另一个字段 Path:Content 如果您要在视图字段中获取 URL
如果您想在字段模板而不是节点模板中执行此操作,请执行以下操作:
{% for item in items %}
{{ item.content['#url'] }}
{{ item.content['#title'] }}
{% endfor %}
或者,如果这不是多值字段,您可以改为这样做:
{{ items|first.content['#url'] }}
{{ items|first.content['#title'] }}
如果您在预处理中执行此操作,我建议您的代码基于 LinkSeparateFormatter.php。它展示了如何从 link 字段中获取标题的想法。这是一种方法。
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,
];
我正在尝试检索 URL 和 Link field 中的 Title 值=31=]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.
感谢您的帮助。
我刚找到解决方案...
$partner->field_lien->uri // The url
$partner->field_lien->title // The title
我的不好,希望对大家有所帮助。
如果你有一个外部的 link,
$node->field_name->uri
会给你 URL,但如果它是内部的,你可能需要再做一些调整:
use Drupal\Core\Url;
$mylink = Url::fromUri($node->field_name[0]->uri);
$mylink->toString();
在节点级别,在您的 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
是相关 link 字段的名称。
这个在树枝上对我有用:
content.field_link_name.0['#title'] // title
content.field_link_name.0['#url_title'] // url value
*您应该使用:"Separate link text and URL" 显示中的小部件
针对 Drupal 8 进行了更新
要获得 url,您需要做的就是:
{{ content.field_link_name[0]['#url'] }}
要获取 link 文本:
{{ content.field_link_name[0]['#title'] }}
我正在对 ECK 字段进行 link 分离,这个解决方案对我很有帮助。我已经更新了 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'] }}
要获得 link 标题:
{{ entity.field_link[0]['#title'] }}
您可以直接在 twig 模板中呈现 link 字段的 uri 或文本。对于节点,您可以在 twig 模板文件中使用以下任一选项(假设 link 字段的机器名称是 field_link
):
{{ node.field_link.uri }}
{{ node.field_link.title }}
渲染块后,如果你想访问其中使用的 link 字段,那么你可以像这样使用 $render['field_target_url']['#items']->uri inside node预处理挂钩。
另一种方法是添加另一个字段 Path:Content 如果您要在视图字段中获取 URL
如果您想在字段模板而不是节点模板中执行此操作,请执行以下操作:
{% for item in items %}
{{ item.content['#url'] }}
{{ item.content['#title'] }}
{% endfor %}
或者,如果这不是多值字段,您可以改为这样做:
{{ items|first.content['#url'] }}
{{ items|first.content['#title'] }}
如果您在预处理中执行此操作,我建议您的代码基于 LinkSeparateFormatter.php。它展示了如何从 link 字段中获取标题的想法。这是一种方法。
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,
];