Hier einige Beispiele zum Erstellen von Links in Drupal 8. Beachten Sie, dass $ this-> t ('some text') in Blöcken verfügbar ist, die BlockBase erweitern. Wenn Sie diese in eine andere Klasse kopieren, die sie nicht besitzt, oder diese in einer .module-Datei verwenden, müssen Sie sie möglicherweise in t () 1 ändern .
Grundlegender Link zu einem Knoten:
$node = Node::load($nid);
$build['node_link'] = $node->toLink()->toRenderable();
Dies erzeugt ein Render-Array wie folgt:
$link = [
'#type' => 'link',
'#url' => $url_object,
'#title' => 'Title of Node',
];
Sie können das Render-Array folgendermaßen erstellen, ohne den Knoten zu laden:
$url_object = Url::fromRoute('entity.node.canonical', ['node' => $nid]);
$link = [
'#type' => 'link',
'#url' => $url_object,
'#title' => $this->t('Read More'),
];
Oder mit der Core-Link-Klasse:
$url = Url::fromRoute('entity.node.canonical', ['node' => $nid]);
$link = Link::fromTextAndUrl($this->t('Read more'), $url);
$build['read_more'] = $link->toRenderable();
Wenn Sie Markup im Text Ihres Links verwenden möchten, können Sie nicht einfach einen String einfügen. Sie müssen ein Render-Array-Element verwenden:
$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);
Um einen absoluten Link zu erstellen, fügen Sie diese Option der URL hinzu, nicht dem Link:
$url = Url::fromRoute('entity.node.canonical', ['node' => $nid], ['absolute' => TRUE]);
$link = Link::fromTextAndUrl($this->t('Read more'), $url);
$build['read_more'] = $link->toRenderable();
Um eine Klasse zu Ihrem Link hinzuzufügen, müssen Sie diese auch zur URL hinzufügen, nicht zum 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();
Um eine Abfragezeichenfolge zu Ihrem Link hinzuzufügen, müssen Sie diese auch zur URL und nicht zum Link hinzufügen:
$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();
So legen Sie fest, dass der Link in einem neuen Fenster mit target = _blank geöffnet wird:
$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();
Hier ist ein Link zu einer Taxonomiebegriffsseite:
$url = Url::fromRoute('entity.taxonomy_term.canonical', ['taxonomy_term' => $tid]);
$link = Link::fromTextAndUrl($this->t('Read more'), $url);
$build['read_more'] = $link->toRenderable();
Hier ist ein Link zur Knotenbearbeitungsseite:
$url = Url::fromRoute('entity.node.edit_form', ['node' => $nid]);
$link = Link::fromTextAndUrl($this->t('Edit'), $url);
$build['read_more'] = $link->toRenderable();
So erstellen Sie einen externen Link:
$url = Url::fromUri('http://www.example.com/');
$link = Link::fromTextAndUrl($this->t('Vist this example site'), $url);
$build['external_link'] = $link->toRenderable();
Link zur Homepage:
$url = Url::fromRoute('<front>');
$link = Link::fromTextAndUrl($this->t('Home'), $url);
$build['homepage_link'] = $link->toRenderable();
Beachten Sie, dass Sie für jedes dieser URL-Objekte die URL als Zeichenfolge abrufen können, indem Sie Folgendes aufrufen:
$url->toString();
Beispielsweise:
$url_string = Url::fromRoute('<front>')->toString();