Добрый день всем.
На днях задумался, почему же vote up/down по-прежнему позволяет голосовать за "свои" материалы и не имеет соответствующей настройки.
На скорую руку изменил код vud_node.module (использовал последнюю версию 6.x-2.x-dev).
Прошу уважаемое сообщество протестировать, предложить свои варианты кода - и тогда отправим это автору модуля.
1) В функцию function vud_node_admin_settings() {
добавил настройку:
'#type' => 'checkbox',
'#title' => t('Voting on own nodes/comments'),
'#description' => t('Do you want to allow user voting on own nodes/comments?'),
'#default_value' => variable_get('vud_node_widget_vote_on_own', FALSE),
);
2) В функцию function vud_node_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
после if (($can_edit=user_access('use vote up/down on nodes')) || user_access('view vote up/down count on nodes')) {
добавил:
$can_vote_on_own = (bool)variable_get('vud_node_widget_vote_on_own', FALSE);
$can_vote_on_this = ($node->uid != $user->uid) || $can_vote_on_own;
3) в switch ($widget_showmode) {
дописал переменную $can_vote_on_this:
if ($teaser == 1) {
$node->content['vud_node_widget_display'] = array(
'#value' => theme(vud_theme_functions('vud_widget', 'node', $node->nid), $node->nid, 'node', $tag, $widget, !$vote_on_teaser || !$can_edit /* <DmGorsky> */ || !$can_vote_on_this /* </DmGorsky> */),
'#weight' => -10,
);
}
break;
case VUD_NODE_DISPLAY_FULL_ONLY:
if ($teaser == 0) {
$node->content['vud_node_widget_display'] = array(
'#value' => theme(vud_theme_functions('vud_widget', 'node', $node->nid), $node->nid, 'node', $tag, $widget, !$can_edit /* <DmGorsky> */ || !$can_vote_on_this /* </DmGorsky> */),
'#weight' => -10,
);
}
break;
case VUD_NODE_DISPLAY_BOTH:
if ($teaser == 1) {
$readonly = !$vote_on_teaser || !$can_edit /* <DmGorsky> */ || !$can_vote_on_this /* </DmGorsky> */;
}
else {
$readonly = !$can_edit /* <DmGorsky> */ || !$can_vote_on_this /* </DmGorsky> */;
}
$node->content['vud_node_widget_display'] = array(
'#value' => theme(vud_theme_functions('vud_widget', 'node', $node->nid), $node->nid, 'node', $tag, $widget, $readonly),
'#weight' => -10,
);
break;
4) в if (!$can_edit) {
добавил:
$widget_message = t('You are not allowed to vote.');
}
elseif (!$vote_on_teaser) {
$widget_message = t('Please go to full version of this content to vote.');
}
/* <DmGorsky> */
if (!$can_vote_on_own) {
$widget_message = t('You can not vote on your own content.');
}
/* </DmGorsky> */
5) похожий код добавил в функцию function vud_node_link($type, $object, $teaser = FALSE) {
Образец - во вложении, изменения окружены комментарием с тэгом.
Комментарии
Хм, в принципе, то же самое делают люди
http://drupal.org/node/554360
А можно просто не выводить в шаблоне виджет для автора ноды:
print theme('vote_up_down_widget', $node->nid, 'node');
}
else {
print t('Rating: ') . theme('vote_up_down_points', $node->nid, 'node');
}
Ну, хотелось бы видеть текущий рейтинг материала
Ну, хотелось бы видеть текущий рейтинг материала
В этом модуле есть проблема с лишними запросами при отключенном голосовании за комменты. Изменилось ли что-то в последней версии?
if (user_access('view up/down votes')) {
$comment = $variables['comment'];
if ($comment->cid) {
$style = variable_get('vote_up_down_widget_style_comment', 0) == 1 ? '_alt' : '';
$variables['vote_up_down'] = theme("vote_up_down_widget$style", $comment->cid, 'comment');
}
}
}
Так вот он проверяет на наличие
user_access('view up/down votes')
. И если мы не используем голосование комментов, модуль все равно будет вызывать виджетtheme("vote_up_down_widget$style", $comment->cid, 'comment')
.Т.е. правильнее было бы добавить еще одно разрешение
user_access('view up/down votes on comments')
, и через него проверять в хуке hook_comment...Он увидит. Виджет
theme('vote_up_down_points', $node->nid, 'node');
как раз и выводит баллы.print theme('vote_up_down_widget', $node->nid, 'node');
}
else {
// Автор материала увидит текущий рейтинг:
print t('Rating: ') . theme('vote_up_down_points', $node->nid, 'node');
}
Это куда вставить?
а то и правда за свои коменты автор голосовать может за свои ноды и тд
Смысл вообще голосовать за свои материалы авторам?
Что вставить? Мой код? Вставляй в шаблон узла. Но предварительно отключи в админке вывод стандартных виджетов. Т.е. мы будем сами выводить виджеты в нужном месте.
Не подскажете, почему у меня не выводятся виджеты при "Но предварительно отключи в админке вывод стандартных виджетов".
Может выключаю что-то не так. Можно пояснить немного с выключением.
новая версия модуля вышла но там все еще не реализована фича чтобы за свой комент или ноду не голосовать...