Dans Drupal 7, c'était possible.
$link = array(
'#type' => 'link',
'#title' => t('My Title'),
'#href' => 'node/1',
);
drupal_render($link);
Mais j'ai essayé cela avec Drupal 8, et il ne produit rien.
$link = array(
'#type' => 'link',
'#title' => t('test'),
'#url' => 'node/1',
);
drupal_render($link);
Existe-t-il un moyen de rendre un lien sans avoir à appeler directement le plugin Link ou à créer ma propre fonction de thème?
Je thématise un formateur de groupe de champs, qui doit produire un tableau de rendu.
L'utilisation de drupal_render()
est déconseillée et ne doit pas être appelée directement; Je l'utilise ici pour rendre mon exemple plus clair.
Réponses:
Je pense que le problème avec votre code Drupal 8 est que '#url' a besoin d'un objet URL.
URL externe
URL interne d'un itinéraire
Dans Drupal 8, vous n'êtes pas censé vous rendre. Lors du portage de code depuis Drupal 7, supprimez tout le rendu et ne retournez que les tableaux de rendu.
la source
drupal_render()
directement, c'était juste pour l'exemple.Comme alternative, vous pouvez également utiliser
\Drupal\Core\Link::fromTextAndUrl()
ou\Drupal\Core\Link::createFromRoute()
.Twig peut imprimer tel quel, vous pouvez également obtenir un tableau de rendu en appelant
\Drupal\Core\Link::toRenderable()
. Le tableau de rendu résultant est le même que lors de sa création à la main.la source
Voici un exemple de rendu d'un lien dans Drupal 8 avec une classe personnalisée. C'est un peu étrange, mais les options sont passées dans l'URL, pas dans la fonction de lien.
Ceci est utile dans un formateur de champ, qui attend le balisage renvoyé. Si vous faites cela ailleurs, il est préférable de le convertir en élément de tableau de rendu de lien.
la source