Ecco alcuni esempi di creazione di collegamenti in Drupal 8. Nota che $ this-> t ('alcuni testi') è disponibile all'interno di blocchi che estendono BlockBase. Se li copi in un'altra classe che non li possiede o li usi in un file .module, potresti doverlo modificare in t () 1 .
Collegamento di base a un nodo:
$node = Node::load($nid);
$build['node_link'] = $node->toLink()->toRenderable();
Questo crea un array di rendering come questo:
$link = [
'#type' => 'link',
'#url' => $url_object,
'#title' => 'Title of Node',
];
È possibile creare l'array di rendering senza caricare il nodo in questo modo:
$url_object = Url::fromRoute('entity.node.canonical', ['node' => $nid]);
$link = [
'#type' => 'link',
'#url' => $url_object,
'#title' => $this->t('Read More'),
];
O usando 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();
Se vuoi usare il markup nel testo del tuo link, non puoi semplicemente inserire una stringa. Devi usare un elemento array di rendering:
$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);
Per creare un collegamento assoluto, aggiungi questa opzione all'URL, non al collegamento:
$url = Url::fromRoute('entity.node.canonical', ['node' => $nid], ['absolute' => TRUE]);
$link = Link::fromTextAndUrl($this->t('Read more'), $url);
$build['read_more'] = $link->toRenderable();
Per aggiungere una classe al tuo link, devi anche aggiungere questo all'URL, non al link:
$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();
Per aggiungere una stringa di query al tuo link, devi anche farlo all'URL, non al link:
$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();
Per impostare il collegamento da aprire in una nuova finestra con 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();
Ecco un link alla pagina dei termini della tassonomia:
$url = Url::fromRoute('entity.taxonomy_term.canonical', ['taxonomy_term' => $tid]);
$link = Link::fromTextAndUrl($this->t('Read more'), $url);
$build['read_more'] = $link->toRenderable();
Ecco un link alla pagina di modifica del nodo:
$url = Url::fromRoute('entity.node.edit_form', ['node' => $nid]);
$link = Link::fromTextAndUrl($this->t('Edit'), $url);
$build['read_more'] = $link->toRenderable();
Per creare un collegamento esterno:
$url = Url::fromUri('http://www.example.com/');
$link = Link::fromTextAndUrl($this->t('Vist this example site'), $url);
$build['external_link'] = $link->toRenderable();
Link alla homepage:
$url = Url::fromRoute('<front>');
$link = Link::fromTextAndUrl($this->t('Home'), $url);
$build['homepage_link'] = $link->toRenderable();
Si noti che su uno di questi oggetti url, è possibile ottenere l'URL come stringa chiamando:
$url->toString();
Per esempio:
$url_string = Url::fromRoute('<front>')->toString();