3

field_tagsノードビューページ(Zenサブテーマ)のブロックに分類用語(フィールドから)を印刷したいと思います。

だから私がしたのは。

template.php

function michal_preprocess_block(&$vars, $hook) {
 if ( arg(0) == 'node' && is_numeric(arg(1)) ) {
   $node = node_load(arg(1));
   $vars['node'] = $node;
   $vars['node_field_tags'] = $node->field_tags;
   $vars['node_content_field_tags'] = $node->content['field_tags'];
 }
}

ただし、で印刷しようとするとblock.tpl.php、これら2つの変数のどちらもフィールドから分類用語を出力しません。

print render($node_content_field_tags);
print render($node_field_tags);

分類用語フィールドをレンダリングするDrupal関数を知っていますか?


編集13.01.2011、00:21

私が理解している限り(これこれ、そしてそれから)、プロセスはコードがこのように多かれ少なかれ見えるはずです

 $node = node_load(arg(1));
 $node_view($node) // Generates an array for rendering a node, see http://api.drupal.org/api/drupal/modules--node--node.module/function/node_view/7
 $vars['node'] = $node;

そしてblock.tpl.php

render($node->content['field_tags']);

ただし、$node->contentはnullです。

私が欠けているものを知っていますか?

4

4 に答える 4

2

実際、より簡単なのは、前処理の次のコードです。

if ($node = menu_get_object()) {
  $vars['node_field_tags'] = field_view_field('node', $node, 'field_tags', 'full');
}

次に、テンプレートで次を使用します。

print render($node_field_tags);
于 2011-01-17T18:25:58.390 に答える
1

まず、前処理関数が実行されていることと、キャッシュが使用されていないことを確認する必要があります。次に、変数を調べてみることができます。で使用できるとは思いませんrender()し、どちら$node->field_tagsもよくわかりません$node->content['field_tags']

変数を調べると、それを理解するのに役立ちます。develはDrupal 7で正常に機能し、そこで役立ちます。

于 2011-01-12T08:33:59.980 に答える
1

また、 CCKブロックモジュールを確認することもできます。各ノードの横に表示されるサイドバーブロックを作成し(コンテンツがある場合)、「teaser」、「full」、「rss」のように、そのブロックを各フィールドのレンダリング先のリストに追加します。

それはあなたが探しているすべてのコントロールを持っていないかもしれませんが、それは始めるのに良い場所かもしれません。

于 2011-01-13T14:59:54.973 に答える
1

私が探していた解決策に出くわしました:

template.phpのmytheme_preprocess_block()*

$node_content = node_view(node_load(arg(1)));
$vars['node_content'] = $node_content;

block.tpl.php

print render($node_content['field_tags']);
于 2011-01-13T20:03:24.803 に答える