如何为链接设置主题?


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()是过时的,不应该被直接调用; 我在这里使用它来使我的例子更清楚。


其实这应该工作。什么不输出什么意思?您在哪里打印呈现的HTML?drupal_render()已弃用。直接调用RenderService:\ Drupal :: service('renderer')-> render($ elements,$ is_recursive_call)只需生成链接,您还可以使用:Link :: fromTextAndUrl($ text,Url $ url)查看链接上课
雷米,2016年

您想要主题是什么?
雷米,2016年

感谢您的回答,但是如上所述,我不想直接调用Link插件。我已经用更多背景信息更新了我的问题,以了解我的情况。
leon.nk

已添加有关我主题的信息。
leon.nk

Answers:


8

我认为您的Drupal 8代码存在的问题是“ #url”需要一个URL对象。

外部网址

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

路线的内部网址

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

在Drupal 8中,您不应该渲染自己。从Drupal 7移植代码时,删除所有渲染并仅返回渲染数组。


非常感谢,这有效!是的,我不是drupal_render()直接说这,只是为了举例。
leon.nk


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)
];
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.