Здравствуйте. Теперь это выглядет так и это больше не модуль. Просто дополнение к комментариям. Выводит историю каждого комментария отдельно. Если используете этот вариант модуль следует отключить или удалить.
1.Заменить ф-циюв /components/comments/model.php на эту
создать файл history.php следующего содержания
и поместить его в /components/comments/
В /components/comments/frontend.php в строке 39 ( у меня) добавить 'SHOW_HISTORY' станет так:В файл /languages/ru/components/comments.php добавить
В файл /components/comments/js/comments.js добавить ф-цию
Создать файл com_comments_history.tpl
Ну и в файл com_comments_list.tpl вставить ссылку после Вроде всё.
P.S.кнопку "продолжить" в окне убирать не стал, не хочется что то менять в системе. А переделывать лень.
P.P.S.
Для тех кому религия не позволяет пользоваться Аяксом, файл history.php выглядет так
Ссылка в com_comments_list.tpl
В файл components/comments/frontend.php добавляем
В файл components/comments/router.php добавляем
P.S.Пользователь Web4ik нашёл небольшой баг и в своём сообщении любезно предоставил решение
1.Заменить ф-цию
public function getRComment($id)
public function getRating($id,$target_id) { $sql = "SELECT r.*, u.nickname as nickname, u.login as login,c.id as cid FROM cms_ratings r LEFT JOIN cms_comments c ON c.target_id=$target_id AND r.item_id=c.id LEFT JOIN cms_users u ON u.id = r.user_id LEFT JOIN cms_user_profiles p ON p.user_id = u.id WHERE item_id=$id "; $result = $this->inDB->query($sql); if (!$this->inDB->num_rows($result)) { return false; } while($rating = $this->inDB->fetch_assoc($result)){ $ratings[] = $rating ; } return $ratings; }
<?php /******************************************************************************/ // // // InstantCMS v1.10.4 // // http://instantcms.ru/ // // // // written by InstantCMS Team, 2007-2014 // // produced by InstantSoft, (www.instantsoft.ru) // // // // LICENSED BY GNU/GPL v2 // // // /******************************************************************************/ include(PATH.'/core/ajax/ajax_core.php'); $do = cmsCore::request('action', 'str', 'add'); $target = cmsCore::request('target', 'str', ''); $target_id = cmsCore::request('target_id', 'int', 0); $comment_id = cmsCore::request('id', 'int', 0); if ($do == 'view' && !$comment_id) { cmsCore::halt(); } cmsCore::loadModel('comments'); $model = new cms_model_comments(); // Проверяем включен ли компонент if(!$inCore->isComponentEnable('comments')) { cmsCore::halt(); } if ($do=='view'){ $inCore = cmsCore::getInstance(); $inDB = cmsDatabase::getInstance(); $inUser = cmsUser::getInstance(); $spyer = $model->getRating($comment_id,$target_id); cmsPage::initTemplate('components', 'com_comments_history')-> assign('do', $do)-> assign('spyer', $spyer)-> assign('is_user', $inUser->id)-> display('com_comments_history.tpl'); cmsCore::halt(); } ?>
В /components/comments/frontend.php в строке 39 ( у меня) добавить 'SHOW_HISTORY' станет так:
$inPage->addHeadJsLang(array('EDIT_COMMENT','CONFIRM_DEL_COMMENT','COMMENT_IN_LINK','SHOW_HISTORY'));
$_LANG['HISTORY'] = 'История'; $_LANG['SHOW_HISTORY'] = 'История рейтинга';
function showHistory(comment_id){ core.message(LANG_SHOW_HISTORY); $.post('/components/comments/history.php', {action: 'view',id: comment_id}, function(data) { if(data) { $('#popup_ok').show(); $('#popup_message').html(data); $('#popup_progress').hide(); } }); }
<table style="width:400px; height:auto"> <tr> <td width="100"><a href="{profile_url login=$spyers.rlogin}" >{$spyers.rnick}</a></td> <td width="100"> <span class=""> {if $spyers.points>0} <span class="cmm_good">+{$spyers.points}</span> {else}<span class="cmm_bad">-{$spyers.points}{/if}</span> </span> </td> <td width="150">{$spyers.pubdate}</td> </tr> </table> {/foreach}
{else} {$comment.rating} {/if} </span>
<span> <div style="float:right " ><a class="ajaxlink" href="javascript:" onclick="showHistory('{$comment.id}', '{csrf_token}')">{$LANG.HISTORY}</a></div> </span>
P.S.кнопку "продолжить" в окне убирать не стал, не хочется что то менять в системе. А переделывать лень.
P.P.S.
Для тех кому религия не позволяет пользоваться Аяксом, файл history.php выглядет так
cmsCore::loadModel('comments'); $model = new cms_model_comments(); $target = cmsCore::request('target', 'str', ''); $target_id = cmsCore::request('target_id', 'int', 0); $comment_id = cmsCore::request('comment_id', 'int'); if($hdo == 'view'){ $spyer = $model->getRating($comment_id,$target_id); cmsPage::initTemplate('components', 'com_comments_history')-> assign('do', $do)-> assign('spyer', $spyer)-> assign('is_user', $inUser->id)-> display('com_comments_history.tpl'); }
Ссылка в com_comments_list.tpl
<span> <div style="float:right" ><a class="ajaxlink" href="/comments/{$comment.id}/history.html">{$LANG.HISTORY}</a></div> </span>
В файл components/comments/frontend.php добавляем
if ($do == 'history'){ $hdo = cmsCore::request('hdo','str',''); include 'components/comments/history.php'; }
В файл components/comments/router.php добавляем
'_uri' => '/^comments/([0-9]+)/history.html$/i', 'do' => 'history', 'hdo' => 'view', 1 => 'comment_id' );
Реклама #
Stecc 10 лет назад #
Stecc 10 лет назад #
Lora 10 лет назад #
Stecc 10 лет назад #
Lora 10 лет назад #
Lora 10 лет назад #
Stecc 10 лет назад #
Lora 10 лет назад #
web4ik 9 лет назад #
web4ik 9 лет назад #
При тестировании заметил следующую ошибку, (ставил на уже работающий инстант).
При голосовании заметил что когда добавляю голос, то там уже задним числом выдает еще кого-то, хотя комментарий добавлен только сегодня был.
Итого:
1.Статья добавлена сегодня.
2.Комментарий добавлен сегодня.
3.В статистике пишется +1 к комментарию
4.Открываешь посмотреть историю там еще показывает как будто бы кто-то голосовал, год назад, хотя такого быть не могло.
5.Проблема не с единичным комментарием, так происходит раз через два, часто.
Вот скрин:
Помогите пожалуйста разобраться в чем может быть проблема.
Заранее спасибо.
web4ik 9 лет назад #
Дело в том, что отслеживается голосование за target_id
Если в таблице cms_ratings есть голоса за разный контент, но с одинаковым id - они все будут выведены в списке проголосовавших.
Надо доработать выборку из базы следующим образом:
web4ik 9 лет назад #
(вот этот код который в функции public function getRating($id,$target_id)
Ris 8 лет назад #
Рассуждаем логически. Нам нужно получить всего четыре значения:
Предмет голосования, номер предмета голосования, результат голосования и дату голосования.
Получаем весь компромат за одну выборку:
Просмотр истории - только для админов, ибо нефиг!
Вот это распаковать в корень:
http://instantcms.ru/users/files/download5793.html
Если шаблон не дефолтный - туда в компоненты тоже засунуть файлы tpl из архива.
abasia 6 лет назад #
Ris 6 лет назад #
Я сейчас попробую это же сделать при помощи плагина. То есть без правки системных файлов.
Ris 6 лет назад #
Вроде вот этот файл:
/users/files/download5883.html
abasia 6 лет назад #