ノードオブジェクトがあり、特定のCCKフィールドのみをレンダリングしたい場合、どうすればよいですか?一般に、ノードテンプレートページやnodeapiフックを意味しているのではありません。
私のカスタムCCKフィールドの_theme_mymodule_formatter_default
_関数は$ elements配列を受け取ります。この関数がノードページで呼び出されると、$ elementsは以下を含むキーを持つ配列です。
... 0と1は、複数値のCCKフィールドの値の配列を指します。
このフィールドをレンダリングしたい場合、フォーマッタ関数とノードオブジェクトしか持っていなければ、どのようにフォーマットすればよいですか? theme('mymodule_formatter', $node->field_my_cck_field[0])
を呼び出すと、フォーマッタ関数の$ elements配列に渡されるのは、次のキーのみを持つ配列です。
しかし、theme()メソッドを呼び出さなくても、デフォルトのテーマフォーマッタ関数を選択するdrupal_render()のようなものを呼び出したいと思います。私はこのようなことをする方法があると想像します、私は方法がわかりません。
D6では、CCKフィールドを次のようにレンダリングできます。
例えば:
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
$field = content_fields('field_my_cck_field', $node->type);
$rendered_field = content_view_field($field, $node, FALSE, TRUE);
Rendering CCK Field values in Drupal 6.x
ノードのコピーがあり、フィールドのレンダリング値を出力する必要がある場合は、次のことを行う必要があります。
次に例を示します。
<?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'];
?>
この場合、関数field_view_value()とfield_view_field()が役立ちますか?
これらの関数に関するこの記事へのリンクを持っている: http://www.computerminds.co.uk/articles/rendering-drupal-7-fields-right-way