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 に答える