Views および Rate モジュールの両方をインストールしました。 views-view-fields.tpl.phpファイルに、次のコードを追加しました。
$node = node_load($row->nid);
echo $node->content['rate_poll']['#value'];
echo $node->title;
$node->content['rate_poll']['#value']
の出力はありませんが、コードはノードタイトルを出力します。どうして?
どのようにしてviews-view-fields.tpl.php、または他のViewsファイルに$node->content['rate_poll']['#value']
を出力できますか?
_$node->content['rate_poll']['#value']
_はノードが表示されているときにのみ存在するため、記述したコードは機能しません。 _$node->content['rate_poll']['#value']
_を追加するコードはhook_nodeapi()
の実装に含まれており、操作が「ビュー」のときにコードが実行されます。
_/**
* Implements hook_nodeapi().
*/
function rate_nodeapi(&$node, $op, $a3, $a4) {
// Adding the form to the node view
if ($op == 'view') {
$widgets = rate_get_active_widgets('node', $node->type, $a3);
foreach ($widgets as $widget_id => $widget) {
$widget_name = 'rate_' . $widget->name;
_rate_check_widget($widget);
$display_mode = $a3 ? $widget->teaser_display_mode : $widget->node_display_mode;
$widget_code = array(
'#value' => rate_generate_widget($widget_id, 'node', $node->nid, $display_mode),
'#weight' => $widget->node_display == RATE_DISPLAY_ABOVE_CONTENT ? 0 : 50,
);
if ($widget->node_display != RATE_DISPLAY_ABOVE_CONTENT && $widget->node_display != RATE_DISPLAY_BELOW_CONTENT) {
$node->$widget_name = $widget_code;
}
else {
$node->content[$widget_name] = $widget_code;
}
}
}
}
_
コードを機能させるには、次のコードに変更する必要があります。
_$node = node_load($row->nid);
node_invoke_nodeapi($node, 'view', FALSE, TRUE);
echo $node->content['rate_poll']['#value'];
echo $node->title;
_
node_invoke_nodeapi() は、最初のパラメーターを操作値として使用して、hook_nodeapi()
の実装を呼び出します。関数が戻ると、_$node
_には、モジュールによって追加された_$node->content
_値(_$node->content['rate_poll']['#value']
_など)が含まれます。