web-dev-qa-db-ja.com

ビューテンプレートファイルでのレートモジュールの呼び出しが機能しない

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']を出力できますか?

2
enjoylife

_$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']_など)が含まれます。

0
kiamlaluno