В Drupal 7 это было возможно.
$link = array(
'#type' => 'link',
'#title' => t('My Title'),
'#href' => 'node/1',
);
drupal_render($link);
Но я пробовал это с Drupal 8, и он ничего не выводит.
$link = array(
'#type' => 'link',
'#title' => t('test'),
'#url' => 'node/1',
);
drupal_render($link);
Есть ли способ, которым я могу сделать ссылку, не вызывая плагин Link напрямую или создать собственную функцию темы?
Я использую форматировщик группы полей, который должен вывести массив визуализации.
Использование drupal_render()
не рекомендуется и не должно вызываться напрямую; Я использую это здесь, чтобы сделать мой пример более понятным.
Ответы:
Я думаю, что проблема с вашим кодом Drupal 8 в том, что для '#url' нужен объект URL.
Внешний URL
Внутренний URL из маршрута
В Drupal 8 вы не должны показывать себя. При переносе кода из Drupal 7 удалите весь рендеринг и верните только массивы рендеринга.
источник
drupal_render()
напрямую, это было только для примера.В качестве альтернативы вы также можете использовать
\Drupal\Core\Link::fromTextAndUrl()
или\Drupal\Core\Link::createFromRoute()
.Twig может распечатать, как есть, вы также можете получить массив визуализации, вызвав
\Drupal\Core\Link::toRenderable()
. Результирующий массив рендеринга такой же, как и его сборка вручную.источник
Вот пример того, как визуализировать ссылку в Drupal 8 с помощью пользовательского класса. Это немного странно, но параметры передаются в URL, а не в функцию ссылки.
Это полезно в формататоре полей, который ожидает возврата разметки. Если вы делаете это в другом месте, лучше конвертировать его в элемент массива рендеринга ссылок.
источник