web-dev-qa-db-ja.com

ラベルやマークアップなしでnode.tpl.phpのフィールドを印刷する方法は?

Drupal 7では、フィールドをtpl.phpこのようなファイル:

しかし、それはラベルとHTMLでそれを印刷します。フィールドの生の値だけを取得する方法はありますか?.

私はあなたが次のことができることを知っています:

  • Field.tpl.phpファイル(またはfield--FIELDNAME.tpl.php)のフィールドマークアップをオーバーライドする
  • 管理インターフェースでラベルをオフにする
  • Fencesなどのモジュールを使用して、管理インターフェースでマークアップを制御します。

ただし、それらすべてに追加の手順が含まれます。 node.tpl.phpファイルで直接実行する方法があるかどうか疑問に思っていました。これにより、すべての変更が1つの場所に含まれます。 (さらに、ラベルが必要なテーマにテーマを変更した場合は、管理インターフェースに戻ってそれらを再びオンにする必要があります)。

4
big_smile

wolffer-eastの回答は、元の質問の目標を満たします。

  • フィールドを印刷する
  • 単一のファイルで実行する(すべてが1か所にあるため)。

ただし、単純なPHPステートメントのみを含むことになっているnode.tpl.phpファイルのコードは非常に複雑です。

結局、次のように書き直しました。私のテンプレートPHPファイルに、私は以下を入れます:

function print_field($field_name) {

if (arg(0) == 'node' && is_numeric(arg(1))) {
  // Get the nid
  $nid = arg(1);

  // Load the node if you need to
  $node = node_load($nid);
}

$field= field_get_items('node', $node, $field_name);
print $field[0]['value'];
} 

これは、ノードをロードすることを除いて、wolffer-eastと同じです。

私のノードファイルでは、以下を使用できます。

<?php print_field('field_body_text') ?>

これにより、ラベルやHTMLなしでフィールドがレンダリングされますが、まだクリーンです。


より高度なバージョンはこれです:

Template.php関数print_field($ field_name、$ format = 'safevalue'){

if (arg(0) == 'node' && is_numeric(arg(1))) {
  // Get the nid
  $nid = arg(1);

  // Load the node if you need to
  $node = node_load($nid);
}

$field= field_get_items('node', $node, $field_name);

if ($format = 'url') {
    print file_create_url($field[0]['uri']);
} else {

print $field[0][$format];
}
}

Node.tpl.php

'filename'は、次のいずれかに置き換えることができます。

  • 値:段落と改行用の追加のHTMLなしでフィールドを印刷します
  • safe_value:段落と改行のフィールドHTMLを出力します
  • filename:フィールドのファイル名を出力しますuri:フィールドのパスをpublic://形式で出力します[*]
  • url:フィールドのパスを従来のURL形式で出力します[*]
  • alt:フィールドのalt値を出力します[*]
  • title:フィールドのタイトル値を出力します[*]
  • width:フィールドの幅の値を出力します[*]
  • height:フィールドの高さの値を出力します[*]

[*]ファイル/画像があるフィールドにのみ適用されます

唯一の欠点は、次のエラーメッセージが表示されることです。

通知:未定義のインデックス:print_field()のsafevalue(template.phpの16行目)

このエラーメッセージの修正方法はわかりませんが、別の質問だと思います。

2
big_smile

特定のフィールドの値だけが必要な場合は、node.tpl.phpファイル(またはnode--type.tpl.php)の$ nodeオブジェクトにあります。

通常は次のようなものです。

$node->field_name['und'][0]['value']
3
Jance

あなたは正しい軌道に乗っています!

ただし、ノードテンプレートファイルではなく、フィールドの個々のマークアップは、field.tpl.phpファイルによって制御されます。カスタムのフィールドを作成することで、フィールドの表示を非常に細かく制御できます。テーマのデフォルトの実装をコピーし、コピーフィールドにfield-name.tpl.phpという名前を付け、余分なマークアップをすべて削除します。

2
nikobelia

あなたが試してみたいかもしれません

<?php print render($content['field_your_field']); ?>

コンテキストおよびエンティティビューモードモジュールと組み合わせたnode.tpl.php内、またはコンテンツタイプ構成のフィールドの表示設定を変更

2
peterhesen

ノードテンプレートを使用している場合は、フィールドをロードして、ロードされたフィールドからコンテンツを取得できます。詳細は field_get_items documentation をご覧ください。つまり、現在の言語で必要な値を返します。

$field_name = 'your_field_here';
$field= field_get_items('node', $node, $field_name);
print $field[0]['value']

それを行う必要があります。複数値フィールドの場合は、各アイテムの要素を返します。 $field[$key]['value']からアクセスできます

1
wolffer-east