Все привет!
Встала задача: добавить оценку записей на стене пользователейСтранно, но "из коробки" такой функционал отсутствует. Поискал на форуме и блогах — решения не нашел. Решил сделать.
На работу ушло минут 15-20 с учетом поиска и изучения имеющего функционала в других компонентах.
Я не жадный — делюсь с сообществом!
Модернизацию делал на основе компонента "Комментарии пользователей"
Пересчитывать рейтинг при удалении записи со стены я не стал, т.к. человек опубликует запись, получит минусов, удалит запись и его рейтинг пересчитается. Не честная игра!
Ниже расписываю шаги:
1. Добавляем вывод элементов голосования с различными проверками
файл: /templates/_default_/components/com_users_wall.tpl
добавляем в контейнер <div class="usr_wall_title"> после вывода заголовка и даты следующий код:
{if !user_id || $record.is_voted || $record.author_id==$user_id} <span class="cmm_votes"> {if $record.rating>0} <span class="cmm_good">+{$record.rating}</span> {elseif $record.rating<0} <span class="cmm_bad">{$record.rating}</span> {else} {$record.rating} {/if} </span> {else} <span class="cmm_votes" id="votes{$record.id}"> <table cellpadding="0" cellspacing="0"><tr> <td><a href="javascript:void(0);" onclick="voteWall({$record.id}, -1);" title="{$LANG.BAD_COMMENT}"><img alt="-" src="/templates/{template}/images/icons/comments/vote_down.gif" style="margin-left:8px;margin-right: 5px;"/></a></td> <td>{$record.rating|rating}</td> <td><a href="javascript:void(0);" onclick="voteWall({$record.id}, 1);" title="{$LANG.GOOD_COMMENT}"><img alt="+" src="/templates/{template}/images/icons/comments/vote_up.gif" style="margin-left:5px"/></a></td> </tr></table> </span> {/if}
в файле /components/users/js/profile.js объявляем в самом конце новую функцию:
function voteWall(record_id, vote){ $('span#votes'+record_id).html('<img src="/images/ajax-loader.gif" />'); $.ajax({ type: "POST", url: "/components/users/vote.php", data: "record_id="+record_id+"&vote="+vote, success: function(data){ $('span#votes'+record_id).html(data); } }); }
в каталоге /components/users/ создаем файл vote.php со следующим содержимым:
<?php /******************************************************************************/ // // // InstantCMS v1.10.3 // // http://instantcms.ru/ // // // // written by InstantCMS Team, 2007-2013 // // produced by InstantSoft, (www.instantsoft.ru) // // // // LICENSED BY GNU/GPL v2 // // // /******************************************************************************/ include(PATH.'/core/ajax/ajax_core.php'); if(!$inUser->id) { cmsCore::halt(); } if(!$inCore->isComponentEnable('users')) { cmsCore::halt(); } cmsCore::loadLib('karma'); $record_id = cmsCore::request('record_id', 'int'); $vote = cmsCore::request('vote', 'int'); $com_user_id = $inDB->get_field('cms_user_wall', "id='$record_id'", 'author_id'); if(!$com_user_id) { cmsCore::halt(); } if ($inUser->id != $com_user_id){ cmsSubmitKarma('wall', $record_id, $vote); } $karma = cmsKarma('wall', $record_id); if ($karma['points']>0){ $karma['points'] = '<span class="cmm_good">+'.$karma['points'].'</span>'; } elseif ($karma['points']<0){ $karma['points'] = '<span class="cmm_bad">'.$karma['points'].'</span>'; } echo $karma['points']; ?>
файл /core/classes/user.class.php после строки:
$record['avatar'] = cmsUser::getUserAvatarUrl($record['author_id'], 'small', $record['imageurl'], $record['is_deleted']);
$record['is_my'] = ($inUser->id == $record['author_id']); if ($inUser->id){ $record['is_voted'] = $record['is_my'] ? true : cmsUser::isRateUser('wall', $inUser->id, $record['id']); } else { $record['is_voted'] = true; }
INSERT INTO cms_rating_targets (target, component, is_user_affect, user_weight, target_table, target_title) VALUES ('wall', 'users', 1, 3, 'cms_user_wall', 'Запись на стене пользователя');
ALTER TABLE cms_user_wall ADD COLUMN rating int(11) NOT NULL DEFAULT '0';
P.S. Дописывалось под 1.10.4, но работать должно на всей ветке.
Всем хорошего весеннего настроения!
Ну и вдруг кому захочется поблагодарить за работу:
Яндекс.Деньги — 41001235605991
WMR — R291063117803
Реклама #
eoleg 9 лет назад #
По моему Денис Вас. чтото такое делал, но там было со списком плюсаторов и минусаторов.
irbis 9 лет назад #
eoleg 9 лет назад #
WD Sx21 6 лет назад #