web-dev-qa-db-ja.com

フィールドコンテナのカスタマイズ

Cckフィールドフォーマッタを作成しました。このフィールドは、filefieldからのアップロードを、表示のためにGoogleドキュメントにリンクする埋め込みiframeに出力します。それは現在出力します:

<div class="field field-type-filefield field-field-documents">
  <div class="field-items">
    <div class="field-item odd">
      <iframe src="http://docs.google.com/viewer?url=http://example.com/2011/sites/example/files/session/documents/brighton_online.doc&amp;embedded=true" style="width:470px; height:296px;" frameborder="0"></iframe>
      <p><a href="http://example.com/2011/sites/example/files/session/documents/brighton_online.doc">Download the document</a></p>        
    </div>
    <div class="field-item even">
      <iframe src="http://docs.google.com/viewer?url=http://example.com/2011/sites/example/files/session/documents/sample.pdf&amp;embedded=true" style="width:470px; height:296px;" frameborder="0"></iframe>
      <p><a href="http://example.com/2011/sites/example/files/session/documents/sample.pdf">Download the document</a></p>        
    </div>
  </div>
</div>

.field-itemのコンテンツ以外のhtmlを編集したいと思います。モジュールでこれを行うことは可能ですか、それともカスタムテーマtplを作成する必要がありますか?

1
digital

それを行うには、フィールドテンプレートcontent-field.tpl.phpをオーバーライドする必要があります。デフォルトのテンプレートは通常/sites/all/modules/cck/theme/content-field.tpl.phpにあります。

これにより、カスタム形式のフィールドだけでなく、レンダリングされるすべてのフィールドのテンプレートが上書きされることに注意してください。理論的には、フィールドのタイプに応じて出力を切り替えるロジックをテンプレートに組み込むことができます。しかし、それは少しハックです。 IMHO、フォーマッターに固有のすべてのhtml出力は、フォーマッター自体によって生成され、div.field-item内にとどまる必要があります。すべてのフォーマッターがcontent-field.tpl.phpのオーバーライドを開始すると想像してください。どのモジュールがオーバーライドの戦いで「勝つ」かわからないため、混乱を招きます。

1
marcvangend

私はこのような目的のために、優れたモジュール Custom Formatters をよく使用しています。シンプルでクリーン。

2
Vacilando

編集:回答中に、他に2つの回答が投稿されています。この場合、ここから取ることができるほとんどは、セマンティックCCKを使用することです。

これを行う最も簡単な方法は、 セマンティックCCK モジュールを使用することです。追加のテンプレートなしで、フィールドごとのマークアップをオーバーライドできます。

ただし、すべてをモジュール内に保持する場合は、content_fieldの定義を返し、必要なマークアップを返す hook_theme() 実装を実装する必要があります。

あなたのhook_theme実装は次のようになります:

mymodule_theme() {
  return array(
    'content_field' => array(
      'arguments' => array('element' => NULL),      
    )
  );
}

mymodule_content_field($element) {
...
}

hook_theme_registry_alter() も使用できます

1
zerolab