私は、highlight.js ライブラリに基づいて、記事内のコード サンプルを強調表示するモジュールを作成しました。このライブラリでは、コード サンプルを <pre><code> ... </code></pre> タグに埋め込む必要があります。記事を書くときに <pre> タグを追加したくありません。他の蛍光ペン ライブラリでは必要がなく、記事を変更せずにライブラリを切り替えられるようにしたいからです。したがって、<code> タグを <pre> で動的にラップする必要があります。_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>
すべての値が「test」に正しく置き換えられていることを確認できますが、
<?php print render($content['body']); ?>
「テスト」の代わりに元のコンテンツを引き続きレンダリングします
モジュールから記事の内容を変更する適切な方法は何ですか?