Hi' there is an option to check if we want to present nodevote in teaser. in "alter" mode it is check within the "nodeapi" function' but in "load" and "view"cases it is checked just after in "_nodevote_get_vote_data" function and this causes more queries that are not needed at all. if there are many teaser-nodes in the page this can result in time and performance.
so I suggest to check NODEVOTE_RESULT_DISPLAY_TEASER value in nodevote_nodeapi also in "alter" and "view" cases.
something like this:
what do you think about?
function nodevote_nodeapi(&$node, $op, $teaser, $page) {
global $user;
switch($op) {
case 'load':
# miriam patch for checking teaser view
if (variable_get(NODEVOTE_RESULT_DISPLAY_TEASER, 0) == 3 && $teaser) {
return $extra;
}
if (variable_get(NODEVOTE_TYPE . $node->type, '0')) {
if (_nodevote_vote_is_visible($node)) {
$extra['nodevote']->vote_display = 1;
}
if (_nodevote_is_votable($node)) {
$extra['nodevote']->vote_do = 1;
}
}
return $extra;
case 'view':
# miriam patch for checking teaser view
if (variable_get(NODEVOTE_RESULT_DISPLAY_TEASER, 0) == 3 && $teaser) {
break;
}
if (variable_get(NODEVOTE_TYPE . $node->type, 0)) {
if ($node->nodevote->vote_display) {
$vote_data = _nodevote_get_vote_data($node->nid, $page);
$node->content['nodevote_display'] = array(
'#value' => theme('nodevote_display_vote', $vote_data),
'#weight' => 10,
);
}
}
if ($page) {
if ($node->nodevote->vote_do) {
$vote = theme('nodevote_do_vote', $node);
$node->content['nodevote'] = array(
'#value' => $vote,
);
}
}
break;
case 'alter':
if(!$page) {
if (variable_get(NODEVOTE_RESULT_DISPLAY_TEASER, 0) != 3) {
$data = _nodevote_get_vote_data($node->nid, $page);
$node->content['nodevote_result'] = array(
'#value' => theme('nodevote_display_vote', $vote_data),
'#weight' => 10,
);
}
}
break;
case 'delete':
db_query('DELETE FROM {nodevote} WHERE nid = %d', $node->nid);
break;
}
}