web-dev-qa-db-fra.com

Extraire l’URL et le titre du champ de lien dans Drupal 8?

J'essaie de récupérer les valeurs URL et Title d'un champ Lien dans Drupal 8.

Dans mon contrôleur personnalisé, je récupère les nœuds avec:

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

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

Lorsque je passe en boucle dans tous mes noeuds, je souhaite récupérer le URL et le Title pour pré-traiter les vars que je vais donner à ma vue.

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

Malheureusement, je n'ai pas trouvé comment récupérer le URL et le Title de field_link.

Merci de votre aide.

15
Kevin Wenger

Au niveau du nœud, dans votre modèle Twig, vous pouvez utiliser:

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

Par exemple:

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

field_link étant le nom du champ de lien en question.

24
Mark Conroy

Je viens de trouver la solution ... 

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

Mon mauvais, j'espère que cela pourrait aider quelqu'un.

9
Kevin Wenger

Juste pour revenir sur ce qui précède, si vous avez un lien externe,

$node->field_name->uri

Vous donnera l'URL, mais s'il s'agit d'un fichier interne, vous devrez peut-être modifier un peu plus:

use Drupal\Core\Url;

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

Vous pouvez rendre l'URI ou le texte d'un champ de lien directement dans le modèle de brindille. Dans le cas d'un nœud, vous pouvez utiliser l'un des éléments suivants dans le fichier de modèle twig (en supposant que le nom de l'ordinateur de votre champ de lien est field_link): 

{{ node.field_link.uri }}

{{ node.field_link.title }} 
2
Benjen

Mis à jour pour Drupal 8

Pour obtenir l'URL, il vous suffit de:

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

Pour obtenir le texte du lien:

{{ content.field_link_name[0]['#title'] }}
1
Vishal Rao

Une autre méthode consiste à ajouter un autre champ Chemin: Contenu si vous essayez d'extraire l'URL dans les champs de vues.

0
Jignesh Rawal

Celui-ci fonctionne pour moi en brindille:

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

* vous devriez utiliser: widget "Séparer le texte du lien et l'URL" dans l'affichage

0
zanvidmar

Je fais cette séparation de lien pour les champs ECK et cette solution m'a vraiment aidé. J'ai mis à jour le code pour les champs ECK pour appliquer un style inline dans un fichier twig comme ceci:

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

Pour obtenir l'URL:
{{ entity.field_link[0]['#url'] }}

Pour obtenir le titre du lien: 
{{ entity.field_link[0]['#title'] }}

0
Arti Prasad

Après avoir rendu un bloc si vous souhaitez accéder au champ de lien utilisé dans celui-ci, vous pouvez utiliser comme ceci $ render ['field_target_url'] ['# items'] -> uri dans le noeud de pré-traitement du noeud.

0
Debasish