Как мне оформить ссылку?

8

В 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()не рекомендуется и не должно вызываться напрямую; Я использую это здесь, чтобы сделать мой пример более понятным.

leon.nk
источник
На самом деле это должно работать. Что значит ничего не выводит? Где вы печатаете этот визуализированный HTML? drupal_render () устарела. Вызовите RenderService напрямую: \ Drupal :: service ('renderer') -> render ($ elements, $ is_recursive_call) Просто для создания ссылки вы также можете использовать: Link :: fromTextAndUrl ($ text, Url $ url) Смотреть ссылку класс .
rémy
Что вы хотите, чтобы тема?
rémy
Спасибо за ответ, но, как указано, я не хочу напрямую вызывать плагин Link. Я обновил свой вопрос, добавив немного дополнительной информации, чтобы понять мой сценарий.
leon.nk
Добавили информацию о том, что я имею к вопросу.
leon.nk

Ответы:

8

Я думаю, что проблема с вашим кодом Drupal 8 в том, что для '#url' нужен объект URL.

Внешний URL

'#url' => Url::fromUri('https://www.drupal.org'),

Внутренний URL из маршрута

'#url' => Url::fromRoute('entity.node.canonical', ['node' => 1]),

В Drupal 8 вы не должны показывать себя. При переносе кода из Drupal 7 удалите весь рендеринг и верните только массивы рендеринга.

4k4
источник
Большое спасибо, это работает! Да я не drupal_render()напрямую, это было только для примера.
leon.nk
2

В качестве альтернативы вы также можете использовать \Drupal\Core\Link::fromTextAndUrl()или \Drupal\Core\Link::createFromRoute().

Twig может распечатать, как есть, вы также можете получить массив визуализации, вызвав \Drupal\Core\Link::toRenderable(). Результирующий массив рендеринга такой же, как и его сборка вручную.

Berdir
источник
1

Вот пример того, как визуализировать ссылку в Drupal 8 с помощью пользовательского класса. Это немного странно, но параметры передаются в URL, а не в функцию ссылки.

use Drupal\Core\Url;

$options = array('attributes' => array('class' => 'my-custom-class'));
$url = Url::fromUri('http://www.example.com', $options);
$markup = \Drupal::l(t('Link Text Goes Here!'), $url);

Это полезно в формататоре полей, который ожидает возврата разметки. Если вы делаете это в другом месте, лучше конвертировать его в элемент массива рендеринга ссылок.

use Drupal\Core\Url;

$options = array('attributes' => array('class' => 'my-custom-class'));
$build['examples_link'] = [
  '#title' => t('Link Text Goes Here!'),
  '#type' => 'link',
  '#url' => Url::fromUri('http://www.example.com', $options)
];
oknate
источник