Aquí hay algunos ejemplos de creación de enlaces en Drupal 8. Tenga en cuenta que $ this-> t ('algún texto') está disponible dentro de los bloques que extienden BlockBase. Si los copia a otra clase que no lo tiene o los usa en un archivo .module, es posible que deba cambiar esto a t () 1 .
Enlace básico a un nodo:
$node = Node::load($nid);
$build['node_link'] = $node->toLink()->toRenderable();
Esto crea una matriz de renderización como esta:
$link = [
'#type' => 'link',
'#url' => $url_object,
'#title' => 'Title of Node',
];
Puede crear la matriz de renderizado sin cargar el nodo de esta manera:
$url_object = Url::fromRoute('entity.node.canonical', ['node' => $nid]);
$link = [
'#type' => 'link',
'#url' => $url_object,
'#title' => $this->t('Read More'),
];
O usando la clase Core Link:
$url = Url::fromRoute('entity.node.canonical', ['node' => $nid]);
$link = Link::fromTextAndUrl($this->t('Read more'), $url);
$build['read_more'] = $link->toRenderable();
Si desea usar marcado en el texto de su enlace, no puede simplemente poner una cadena. Necesita usar un elemento de matriz de renderizado:
$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);
Para crear un enlace absoluto, agregue esta opción a la URL, no el enlace:
$url = Url::fromRoute('entity.node.canonical', ['node' => $nid], ['absolute' => TRUE]);
$link = Link::fromTextAndUrl($this->t('Read more'), $url);
$build['read_more'] = $link->toRenderable();
Para agregar una clase a su enlace, también debe agregar esto a la URL, no al enlace:
$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();
Para agregar una cadena de consulta a su enlace, también debe hacerlo en la URL, no en el enlace:
$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();
Para configurar el enlace para que se abra en una nueva ventana 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();
Aquí hay un enlace a una página de términos de taxonomía:
$url = Url::fromRoute('entity.taxonomy_term.canonical', ['taxonomy_term' => $tid]);
$link = Link::fromTextAndUrl($this->t('Read more'), $url);
$build['read_more'] = $link->toRenderable();
Aquí hay un enlace a la página de edición de nodos:
$url = Url::fromRoute('entity.node.edit_form', ['node' => $nid]);
$link = Link::fromTextAndUrl($this->t('Edit'), $url);
$build['read_more'] = $link->toRenderable();
Para crear un enlace externo:
$url = Url::fromUri('http://www.example.com/');
$link = Link::fromTextAndUrl($this->t('Vist this example site'), $url);
$build['external_link'] = $link->toRenderable();
Enlace a la página de inicio:
$url = Url::fromRoute('<front>');
$link = Link::fromTextAndUrl($this->t('Home'), $url);
$build['homepage_link'] = $link->toRenderable();
Tenga en cuenta que en cualquiera de estos objetos de URL, puede obtener la URL como una cadena llamando a:
$url->toString();
Por ejemplo:
$url_string = Url::fromRoute('<front>')->toString();