0

我有一些文本存储在名为“协议”的自定义内容类型的正文字段中。当您查看节点时,存储在 body 字段中的内容并不完全是我希望看到的内容。要么是完整的,要么是预告片。例如我可能会存储这样的东西:

“[用法]可重复使用 DNA 模板微阵列通过无细胞合成进行蛋白质排列。[/用法] [安全注意事项]测试安全注意事项 [/安全注意事项]”

但是当您查看它时我想要显示的是:

“通过无细胞合成可重复使用 DNA 模板微阵列进行蛋白质排列。测试安全性考虑”

我教这是你可以使用 hook_view 的,所以我在我的模块中尝试了这个功能:

function molmethtag_node_view($node, $view_mode, $langcode) {
  if ($node->type == 'protocol2' && $view_mode=='full') {

    $body = $node->body;
    $prot_array = _molmethtag_extract_data($body['und'][0]['value']);
    $protocol = '';
    foreach($prot_array as $tag => $prot_row) {
      $protocol .= "<div id='molmethtag_".$tag."'>".$prot_row."</div>";
    }                                                                                                                  
    $body['und'][0]['value'] = $protocol;

  }
}

但这并没有如我所愿。我希望保存在协议中的文本在查看时会显示为正文,但它显示的是原始文本。

有人知道我做错了什么吗?hook_view 不用于此吗?我应该改用/做什么?

4

1 回答 1

2

一开始有点令人困惑,但是您需要更改以进行显示的值在$node->content数组上:

$node->content['body'] = array(
  '#markup' => $protocol
);

hook_node_view()是一个很好的地方,但只是为了完整起见,如果你愿意,你也可以做类似的事情hook_preprocess_node()

于 2012-06-20T14:29:21.907 回答