Voici quelques exemples de création de liens dans Drupal 8. Notez que $ this-> t ('du texte') est disponible dans les blocs qui étendent BlockBase. Si vous les copiez dans une autre classe qui ne les a pas ou les utilisez dans un fichier .module, vous devrez peut-être changer cela en t () 1 .
Lien de base vers un nœud:
$node = Node::load($nid);
$build['node_link'] = $node->toLink()->toRenderable();
Cela crée un tableau de rendu comme celui-ci:
$link = [
'#type' => 'link',
'#url' => $url_object,
'#title' => 'Title of Node',
];
Vous pouvez créer le tableau de rendu sans charger le nœud de cette façon:
$url_object = Url::fromRoute('entity.node.canonical', ['node' => $nid]);
$link = [
'#type' => 'link',
'#url' => $url_object,
'#title' => $this->t('Read More'),
];
Ou en utilisant la classe Link principale:
$url = Url::fromRoute('entity.node.canonical', ['node' => $nid]);
$link = Link::fromTextAndUrl($this->t('Read more'), $url);
$build['read_more'] = $link->toRenderable();
Si vous souhaitez utiliser le balisage dans le texte de votre lien, vous ne pouvez pas simplement insérer une chaîne. Vous devez utiliser un élément de tableau de rendu:
$url = Url::fromRoute('entity.node.canonical', ['node' => $nid]);
$link_text = [
'#type' => 'html_tag',
'#tag' => 'span',
'#value' => $this->t('Load More'),
];
$link = Link::fromTextAndUrl($link_text, $url);
Pour créer un lien absolu, vous ajoutez cette option à l'URL, pas au lien:
$url = Url::fromRoute('entity.node.canonical', ['node' => $nid], ['absolute' => TRUE]);
$link = Link::fromTextAndUrl($this->t('Read more'), $url);
$build['read_more'] = $link->toRenderable();
Pour ajouter une classe à votre lien, vous devez également l'ajouter à l'URL, pas au lien:
$options = [
'attributes' => [
'class' => [
'read-more-link',
],
],
];
$url = Url::fromRoute('entity.node.canonical', ['node' => $nid], $options);
$link = Link::fromTextAndUrl($this->t('Read more'), $url);
$build['read_more'] = $link->toRenderable();
Pour ajouter une chaîne de requête à votre lien, vous devez également le faire à l'URL, pas au lien:
$options = [
'query' => [
'car' => 'BMW',
'model' => 'mini-cooper',
],
'attributes' => [
'class' => [
'read-more-link',
],
],
];
$url = Url::fromRoute('entity.node.canonical', ['node' => $nid], $options);
$link = Link::fromTextAndUrl($this->t('Read more'), $url);
$build['read_more'] = $link->toRenderable();
Pour définir le lien à ouvrir dans une nouvelle fenêtre avec target = _blank:
$options = [
'attributes' => [
'target' => '_blank'
],
];
$url = Url::fromRoute('entity.media.edit_form', ['media' => $entity->id()], $options);
$link = Link::fromTextAndUrl(t('Edit'), $url);
$form['entity']['edit_link'] = $link->toRenderable();
Voici un lien vers une page de termes de taxonomie:
$url = Url::fromRoute('entity.taxonomy_term.canonical', ['taxonomy_term' => $tid]);
$link = Link::fromTextAndUrl($this->t('Read more'), $url);
$build['read_more'] = $link->toRenderable();
Voici un lien vers la page de modification du nœud:
$url = Url::fromRoute('entity.node.edit_form', ['node' => $nid]);
$link = Link::fromTextAndUrl($this->t('Edit'), $url);
$build['read_more'] = $link->toRenderable();
Pour créer un lien externe:
$url = Url::fromUri('http://www.example.com/');
$link = Link::fromTextAndUrl($this->t('Vist this example site'), $url);
$build['external_link'] = $link->toRenderable();
Lien vers la page d'accueil:
$url = Url::fromRoute('<front>');
$link = Link::fromTextAndUrl($this->t('Home'), $url);
$build['homepage_link'] = $link->toRenderable();
Notez que sur n'importe lequel de ces objets url, vous pouvez obtenir l'url sous forme de chaîne en appelant:
$url->toString();
Par exemple:
$url_string = Url::fromRoute('<front>')->toString();