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.
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.
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.
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();
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 }}
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'] }}
Une autre méthode consiste à ajouter un autre champ Chemin: Contenu si vous essayez d'extraire l'URL dans les champs de vues.
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
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'] }}
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.