为什么 HTML 在简单的 'title' 更改中呈现为纯文本?

Why is HTML rendering as Plain Text in a simple 'title' alteration?

我已经能够使用以下代码更改每个节点的 Comment Link 'title' 文本(默认呈现 'Add new comment'),但是如果我添加 HTML,它呈现为纯文本。我正在尝试在此文本之前添加一个 FontAwesome 图标 <i class="fa fa-comments" aria-hidden="true"></i>

function MODULE_node_view_alter(&$build) {
  $node = $build['#node'];
  if (isset($build['links']['comment']['#links']['comment-add'])) {
    $build['links']['comment']['#links']['comment-add']['title'] = '<i class="fa fa-comments" aria-hidden="true"></i> Add Comment';
  }
}

我只传递了一个 $build 参数,但我不确定这是否是问题所在。

有什么想法吗?

如果您不能在该字段中包含 html,因为这是可能需要保留为纯文本和可翻译的字段类型,您可以使用 css 来添加图标.

    a:before {
        font-family: FontAwesome;
        content: "\f086";
    }
    
    
    
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"/>

<a>Add Comment</a>

您可以通过将 html 选项设置为 TRUE 来在链接中呈现 HTML。 选中 theme_links() 以查看所有选项。

例如

theme('links', array(
  'links' => array(
    'title' => '<span>Title</span>',
    'href' => 'node/1',
    'html' => FALSE, // default
  )
))

会导致 span 标签被转义,而

theme('links', array(
  'links' => array(
    'title' => '<span>Title</span>',
    'href' => 'node/1',
    'html' => TRUE,
  )
))

会将 span 标记呈现为 html。

因此在您的情况下,您需要添加以下行。

$build['links']['comment']['#links']['comment-add']['html] = TRUE;