DrupalのfieldをBodyで参照するには?

Events happening in the community are now at Drupal community events on www.drupal.org.
nobuyuki3's picture

Drupal週末ユーザーです。

また、分からない事だらけなので質問させてください。

DrupalのFieldを幾つか作って、最初のfieldに数字「5136553」などを入れたとします。
それから、その数値を次のBody Fieldで取り出すにはどうすれば良いのでしょうか。

ノードに外部の商品APIなどで幾つか商品紹介したいなと思っているのですが、
商品番号を最初のFieldに入れておけば、次のBodyでPHP使ってその番号から商品を表示させるみたいな感じです。
番号だけ入れれば、BodyのPHPは共通だったら楽チンだなーと思ったのです。

テンプレートだと $field_field name [0][value]; みたいな形で取り出せるのでしょうか。
これはBodyとかでは使えなさそうなのですが。

良く分からない質問ですいません!
何か簡単な方法あれば、ヒントでも頂けたら助かります。

Comments

qchan's picture

Drupalは工夫次第でなんでもできるので、コレがオススメって難しいですが、
Bodyの中に都度PHP書くと危険ですし、文章が編集しにくくなります。
CCKのフィールドはデフォルトバリューが使えますから、一つ追加してそこへ呼び出しのPHPを書いてしまうのもあり。

一般的にはnode.tpl.phpなりのテンプレートに書いたほうが良いと思います。
コンテンツエリアのどこにでも呼び出せますが、$bodyの中には入りませんから、そこは工夫しないといけないですね。
$bodyの中を変更するならtemplate.phpでオーバーライドになりますので、ちょっとめんどくさいです。

呼び出すフィールドがどこに入っているか探すなら、D6だと
Content Templates (Contemplate) | drupal.org
がわかりやすいです。

D7だと、develモジュールを入れて
node.tpl.phpに

dsm(get_defined_vars());

とやると探しやすいと思いますよ。

$field_field name

dokumori's picture

$field_field name [0][value];

この書き方からすると、D6 をお使いでしょうか?バージョンによって多少書き方が変わります。D6の場合、変数が持つ値をサニタイズせずにそのまま print してしまうと XSS につながる危険があるので気をつけてください。(不特定多数のユーザーがコンテンツを作成するサイトでなければリスクは極めて低いですが、知っておいて損はないと思います)

テンプレート内でこのフィールドの値を利用する場合:
D6 であれば、

<?php print $[field_name]_rendered; ?>

(CCK が上記のような変数を作ってくれています)

D7 であれば

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

になります。

どうしても body の一部として表示したい場合(あまりユースケースが想像できないのですが)qchan の言及した template.php 内での処理のほかに、カスタムモジュール内でも可能です:

D6 であれば、hook_nodeapi() の $op == 'view' にて

  $node['content']['body']['#value'] .= $[field_name][0]['safe'];

D7 であれば、 hook_node_view_alter() で

  $build['body'][0]['#markup'] .= $build['[field_name]'][0]['#markup'];

という方法でできると思います。

日本 コミュニティ: Drupal Japan User Group

Group organizers

Group categories

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds:

Hot content this week