web-dev-qa-db-ja.com

Drupal 6のノードオブジェクトのみでCCKフィールドをレンダリングします

ノードオブジェクトがあり、特定のCCKフィールドのみをレンダリングしたい場合、どうすればよいですか?一般に、ノードテンプレートページやnodeapiフックを意味しているのではありません。

私のカスタムCCKフィールドの_theme_mymodule_formatter_default_関数は$ elements配列を受け取ります。この関数がノードページで呼び出されると、$ elementsは以下を含むキーを持つ配列です。

  • #formatter
  • #ノード
  • #フィールド名
  • #テーマ
  • 1

... 0と1は、複数値のCCKフィールドの値の配列を指します。

このフィールドをレンダリングしたい場合、フォーマッタ関数とノードオブジェクトしか持っていなければ、どのようにフォーマットすればよいですか? theme('mymodule_formatter', $node->field_my_cck_field[0])を呼び出すと、フォーマッタ関数の$ elements配列に渡されるのは、次のキーのみを持つ配列です。

  • 1

しかし、theme()メソッドを呼び出さなくても、デフォルトのテーマフォーマッタ関数を選択するdrupal_render()のようなものを呼び出したいと思います。私はこのようなことをする方法があると想像します、私は方法がわかりません。

1
user779159

D6では、CCKフィールドを次のようにレンダリングできます。

content_format

例えば:

print content_format('field_my_cck_field', $node->field_my_cck_field[0], 'default', $node);

代替オプションについては content_view_field も参照してください。

ノードテンプレートを使用していて、フィールドが表示されるように設定されている場合は、次のように移動することもできます。

print $FIELD_NAME_rendered // where $FIELD_NAME is the field name
2
David Thomas
$field = content_fields('field_my_cck_field', $node->type);
$rendered_field = content_view_field($field, $node, FALSE, TRUE);
2
Jekis

Rendering CCK Field values in Drupal 6.x

ノードのコピーがあり、フィールドのレンダリング値を出力する必要がある場合は、次のことを行う必要があります。

  1. 表示モードを「完全」または「ティーザー」に設定します
  2. Node_build_contentを介してノードをプッシュする
  3. レンダリングするフィールドの「ビュー」キーを出力します

次に例を示します。

<?php
$nid = 12345;
$node = node_load($nid);

if ($teaser_view_is_what_you_want) {
    $build_mode = NODE_BUILD_PREVIEW;
    $teaser = TRUE;
    $page = FALSE;
else {
    $build_mode = NODE_BUILD_NORMAL;
    $teaser = FALSE;
    $page = TRUE;
}

$node->build_mode = $build_mode;
$node = node_build_content($node, $teaser, $page);

content_alter($node);

echo $node->field_myfield[0]['view'];
?>
1
Christopher

この場合、関数field_view_value()とfield_view_field()が役立ちますか?

これらの関数に関するこの記事へのリンクを持っている: http://www.computerminds.co.uk/articles/rendering-drupal-7-fields-right-way

0
Lance