web-dev-qa-db-ja.com

template_preprocess_fieldフックがカスタムテンプレートに対して呼び出されないのはなぜですか?

template_preprocess_field() フックを実装したサイトで作業しています。フィールドのコンテンツを変更したいのですが、カスタムテンプレート(node--emploi.tpl.php)を持つコンテンツタイプのノードを除くすべてのノードでコードが機能します。コンテンツのノードに別のテンプレートがあるため、奇妙ですtarif(node--tarif.tpl.php)という名前のタイプ。この場合、フックが呼び出されます。

テンプレートnode--emploi.tpl.phpファイル内のコード:

<div class="editor">
  <?php
  /* At this point the body's h2 do not know what the nid is, so a quick and dirty replace will set it right. */
  print preg_replace('/NO-NID[a-z0-9]*--/', $nid . '--', check_markup($field_stm_emploi_temoignage_body[0]['value'], $field_stm_emploi_temoignage_body[0]['format']));
 ?>
</div>
2

@ Clive によると、問題はコードがフィールド出力にrender()関数を使用しなかったことであり、この場合は template_preprocess_field() ですフックは呼び出されません。

現時点では、2つの解決策があります。

  1. テンプレートファイル(node--emploi.tpl.php)で render() 関数を使用して、フィールドの出力を作成します。この場合、 template_preprocess_field() フックが呼び出されます。
  2. template_preprocess_node() フックを使用して、コンテンツタイプの$vars['type']を確認します。この場合、テンプレートファイルは同じままです。
3