ノードテンプレートのフィールドを属性として使用する


7

Drupal 7でノードテンプレートの「属性」としてフィールドを使用するためのベストプラクティスは何ですか?ここでは「属性」という用語を大まかに使用して、HTMLフラグメントとして具体的にレンダリングできないものを意味しています。むしろ、テンプレートのどこかにあるHTMLフラグメント内にレンダリングされます。

フィールドAPIを使用すると、「コンテンツ」フィールドをHTMLで非常に簡単にラップできるため、テンプレートでレンダリングできます。レンダーツリーが機能するため、ノードテンプレートを編集する必要はありません。

次のようなコンテンツタイプを検討します。

  • タイトル(title)
  • ボディ(ボディ)
  • 追加(field_extra)

ここで、field_extraは、ノードのタイトルに付け加えたいものです。たとえば、

<?php if (!$page && $title): ?>
<h2><?php print $title ?> &mdash; <?php print $extra; ?></h2>
<?php endif; ?>
print render($content);

これは、私が話していることを説明するための非常に単純化された例です。

アクセスできた

$extra = trim($field_extra[0]["safe_value"]);

しかし、どのように構成され、フィールドに直接アクセスすることが推奨されないかによって、show() / hide()ロジックを経由する必要があります。

私が作ることができるtheme_fieldを() 、など

function mytheme_field__field_extra ($variables)
{
  $items = $variables["items"];
  return count($items) == 0 ? "" : trim(drupal_render($items[0]));
}

次にrender()を使用しますが、それでもshow()/ hide()シェナンガンを実行する必要があり、フィールドを実際にレンダリングするのではなく、どこかで使用するためにプレーンバージョンを取得しようとしています。

または、これがtemplate_preprocess_node()によって本当に処理されるべきか、例えば

function mytheme_preprocess_node (&$variables)
{
  $node = $variables["node"];
  $language = $node->language;

  if (isset($variables["field_extra"])
      && isset($variables["field_extra"][$language])
      && isset($variables["field_extra"][$language][0])) {
        $variables["extra"] = trim($variables["field_extra"][$language][0]["safe_value"]);
  }
}

私はこれらすべてがうまくいくことを知っています。私はここでのベストプラクティスに本当に興味があります。template_preprocess_node()がこれを処理する最良の方法だと思いますが、このケースについて決定的なものは何も見ていません。

ありがとう。

回答:


1

"<hidden>"コンテンツタイプの「管理表示」でフォーマットを単に設定しない理由はありますか?その後はレンダリングされませんが、必要な場合は引き続き使用できます。

本当にこれをプログラムで実行したい場合、私にとってのベストプラクティスは、テーマではなくモジュールを使用することです。どうして?なぜなら、テーマが変わった場合...追加で表示したいですか?いいえ、モジュールに配置することでテーマから独立させます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.