我基于 highlight.js 库创建了一个模块来突出显示文章中的代码示例。该库要求将代码示例嵌入到 <pre><code> ... </code></pre> 标记中。我不想在写文章的时候添加 <pre> 标签,因为其他荧光笔库不需要它,我希望能够在不修改文章的情况下切换库。所以我需要用 <pre> 动态包装 <code> 标签。我试图实现 _node_view( 和 _node_view_alter( 没有成功的钩子。
我的代码看起来像
function highlight_node_view($node, $view_mode, $langcode) {
$node->content['body']['und'][0]['safe_value'] = "test";
$node->body['und'][0]['safe_value'] = "test";
$node->content['body']['und'][0]['value'] = "test";
$node->body['und'][0]['value'] = "test";
}
function highlight_node_view_alter($build, $node) {
$build["body"]["#items"]["0"]["value"] = "TEST";
$build["body"]["#items"]["0"]["safe_value"] = "TEST";
$build["body"]["#formater"]["0"]["#markup"] = "TEST";
}
如果我打印模板中的内容
<pre>
<?php
ob_start("minimal_htmlspecialchars_callback");
print_r($content);
ob_end_flush();
?>
</pre>
我可以确认所有值都正确替换为“测试”,但调用
<?php print render($content['body']); ?>
仍然呈现原始内容而不是“测试”
从模块更改文章内容的正确方法是什么?