In Drupal 7 war dies möglich.
$link = array(
'#type' => 'link',
'#title' => t('My Title'),
'#href' => 'node/1',
);
drupal_render($link);
Aber ich habe dies mit Drupal 8 versucht und es gibt nichts aus.
$link = array(
'#type' => 'link',
'#title' => t('test'),
'#url' => 'node/1',
);
drupal_render($link);
Gibt es eine Möglichkeit, einen Link zu rendern, ohne das Link-Plugin direkt aufrufen oder meine eigene Themenfunktion erstellen zu müssen?
Ich thematisiere einen Feldgruppenformatierer, der ein Renderarray ausgeben muss.
Die Verwendung von drupal_render()
ist veraltet und sollte nicht direkt aufgerufen werden. Ich benutze es hier, um mein Beispiel klarer zu machen.
Antworten:
Ich denke, das Problem mit Ihrem Drupal 8-Code ist, dass '#url' ein URL-Objekt benötigt.
Externe URL
Interne URL von einer Route
In Drupal 8 solltest du dich nicht selbst rendern. Entfernen Sie beim Portieren von Code aus Drupal 7 das gesamte Rendering und geben Sie nur Render-Arrays zurück.
quelle
drupal_render()
direkt, es war nur für das Beispiel.Alternativ können Sie auch
\Drupal\Core\Link::fromTextAndUrl()
oder verwenden\Drupal\Core\Link::createFromRoute()
.Twig kann das so drucken, wie es ist. Sie können auch ein Render-Array erhalten, indem Sie es aufrufen
\Drupal\Core\Link::toRenderable()
. Das resultierende Render-Array entspricht dem Erstellen von Hand.quelle
Hier ist ein Beispiel für das Rendern eines Links in Drupal 8 mit einer benutzerdefinierten Klasse. Es ist etwas seltsam, aber die Optionen werden an die URL übergeben, nicht an die Linkfunktion.
Dies ist nützlich in einem Feldformatierer, der die Rückgabe von Markups erwartet. Wenn Sie dies an einer anderen Stelle tun, konvertieren Sie es am besten in ein Link-Rendering-Array-Element.
quelle