- Друзья:
- Drupal cook book |
- Танцы с Друпалом |
- Уберкарт.ру |
- Сетегном |
- Карикатуры |
Запрещаем авторам голосовать за свои посты и комментарии
- strict warning: Declaration of views_handler_field_user_name::init() should be compatible with views_handler_field_user::init(&$view, $data) in /var/www/shvabrashvabr.ru/sites/all/modules/views/modules/user/views_handler_field_user_name.inc on line 61.
- strict warning: Declaration of views_handler_argument_many_to_one::init() should be compatible with views_handler_argument::init(&$view, $options) in /var/www/shvabrashvabr.ru/sites/all/modules/views/handlers/views_handler_argument_many_to_one.inc on line 169.
Posted июня 21st, 2008 by Ромка
По умолчанию, если для голосования используется модуль Vote Up/Down, авторы могут голосовать за свои материалы и комментарии. Теоретически, в этом нет ничего плохого, так как в настройках модуля Views можно задать фильтры с учетом этой особенности, но избавиться от этой фичи достаточно просто.
В модуле Vote Up/Down в файле vote_up_down.module есть функция theme_vote_up_down_widget. Я уже не раз говорил о том, что в Друпале можно легко переопределить внешний вид любого элемента не изменяя код ядра и модулей. Для этого как раз и нужны функции, начинающиеся с префикса "theme". Эту функцию надо скопировать и перенести в файл template.php, расположенный в папке с темой. Если такого файла еще нет, то его надо создать вручную.
Если вы используете тему, которая работает не с помощью движка PHPTemplate, например chameleon, то эту функцию надо скопировать в файл имя_темы.theme.
Далее префикс theme надо заменить на имя темы. В случае Швабрышвабр, использующей тему aberdeen, функция получила имя aberdeen_vote_up_down_widget. Теперь с виджетом голосовалки можно делать все что угодно, например можно изменить пути к картинкам, имена используемых классов или полностью переопределить верстку. В моем примере я убираю возможность авторам голосовать за свои посты и комментарии:
function aberdeen_vote_up_down_widget($cid, $type) {
global $user;
if (user_access('view up-down vote')) {
$b = TRUE;
if($type == 'node') $r = db_fetch_object(db_query("SELECT `uid` FROM {node} WHERE nid = %d LIMIT 0,1", $cid));
if($type == 'comment') $r = db_fetch_object(db_query("SELECT `uid` FROM {comments} WHERE cid = %d LIMIT 0,1", $cid));
if($user->uid == $r->uid) $b = FALSE;
$output = '
';
if (user_access('use up-down vote') && ($user->uid || variable_get('vote_up_down_anonymous_vote', 0)) && $b) {
$user_vote = votingapi_get_user_votes($type, $cid, _vote_up_down_get_uid());
if ($user_vote[0]->value > 0) {
$class = 'vote-up-act';
$class2 = 'vote-down-inact';
}
else if ($user_vote[0]->value < 0) {
$class = 'vote-up-inact';
$class2 = 'vote-down-act';
}
else {
$class = 'vote-up-inact';
$class2 = 'vote-down-inact';
}
$output .= ''. l('', "vote_up_down/$type/$cid/1", array('class' => $class, 'title' => t('Vote up')), drupal_get_destination(), NULL, FALSE, TRUE) .'';
$output .= ''. l('', "vote_up_down/$type/$cid/-1", array('class' => $class2, 'title' => t('Vote down')), drupal_get_destination(), NULL, FALSE, TRUE) .'';
}
else if(!$b) {
$output .= '';
$output .= '';
} else {
$output .= '';
$output .= '';
}
$output .= '
';
return $output;
}
}
Комментарии
Спасибо. Изменил похожим образом Extra Voting Forms. Он как-то поживее кажется, чем Vote Up/Down :)