Поиск сообщества
Показаны результаты для тегов 'рейтинг'.
Найдено: 4 результата
-
-
Плагин отображает общую репутацию темы при просмотре форума. Репутация подсчитывается только у первого поста темы. Просмотр полной приложение
-
При миграции с vBulletin на Invision Community администраторы часто встречаются вопросом миграции данных некогда популярного для vBulletin приложения - iTrader, позволяющего производить оценку сделок, в похожее приложение для Invision Community - Trader Feedback System. В данной статье мы разберёмся как всё же перенести эти данные. 1 этап - перенос общего рейтинга Сперва перенесём общее число рейтинга пользователей, который содержится в таблице user (vBulletin) в колонке itrader_total. Создадим php файл с произвольным именем и положим его в корень нашего установленного Invision Community и добавим в него следующий код: <?php require_once 'init.php'; $userRatings = iterator_to_array( \IPS\Db::i()->select( 'username, itrader_total', 'user' ) ); foreach ( $userRatings as $k => $v ) { if ( $v['itrader_total'] != 0 ) { if ( $v['itrader_total'] > 0 ) { \IPS\Db::i()->update('core_members', array('feedb_pos' => $v['itrader_total']), array('name=?', $v['username'])); } if ( $v['itrader_total'] < 0 ) { \IPS\Db::i()->update('core_members', array('feedb_neg' => $v['itrader_total']), array('name=?', $v['username'])); } } } Всё просто. Здесь мы подключаемся к базе Invision Community, добавляем в массив поля имени и рейтинг из таблицы user (ПРИМЕЧАНИЕ: таблица user должна быть в той же базе, в которую установлен Invision Community). Путём конструкции foreach проходим весь массив и добавляем рейтинг в поле feedb_pos таблицы core_members, если рейтинг положительный и в поле feedb_neg той же таблицы, если рейтинг ниже нуля. 2 этап - перенос комментариев к сделке Теперь задача чуть посложнее. Нам нужно добавить сущности сделок в таблицу feedback_feedback для Trader Feedback System. Для этого замените код в нашем произвольном php файле (или создайте новый файл) на следующий код: <?php require_once 'init.php'; foreach ( \IPS\Db::i()->select( '*', 'itrader_comments' ) as $row ) { try { /* Находим отправителя */ $sender_name = \IPS\Db::i()->select('username', 'user', array('userid=?', $row['userid']))->first(); $sender_id = \IPS\Db::i()->select('member_id', 'core_members', array('name=?', $sender_name))->first(); /* Находим получателя */ $itrader = \IPS\Db::i()->select('*', 'itrader', array('rateid=?', $row['rateid']))->first(); $receiver_name = \IPS\Db::i()->select('username', 'user', array('userid=?', $itrader['rateduserid']))->first(); $receiver_id = \IPS\Db::i()->select('member_id', 'core_members', array('name=?', $receiver_name))->first(); } catch( \Exception $e ){} /* Рейтинг */ if ( $itrader['rating'] == 0 ) { $rating = 1; } elseif ( $itrader['rating'] == -1 ) { $rating = 0; } else { $rating = 2; } \IPS\Db::i()->insert( 'feedback_feedback', array( 'fb_id' => NULL, 'fb_date' => $row['dateline'], 'fb_sender_id' => $sender_id, 'fb_receiver_id' => $receiver_id, 'fb_ip' => $row['ipaddress'], 'fb_comment' => $row['comment'], 'fb_rating' => $rating, 'fb_content_id' => 117471, 'fb_type' => 0, 'fb_class' => 'IPS\forums\Topic' ) ); } Поскольку после конвертирования пользователи получили другие ID, придётся выполнить некоторые манипуляции по соответствую ID старого пользователя новому. Здесь мы: Находим имя получателя из по его id в vBulletin; Находим id по имени в Invision Community. Тоже самое с получателем. Определяем рейтинг, т.к. у этих приложений разная система подсчёта. Делаем инсерты в таблицу feedback. siv1987 предложил (за что ему огромное спасибо) упростить данный код и сделать всё одним запросом: \IPS\Db::i()->select( 'c.*, m.member_id as sender_id, m2.member_id as receiver_id, u.username as sender_name, u2.username as receiver_name, i.rating', array( 'itrader_comments', 'c' ) ) ->join( array( 'user', 'u' ), 'u.userid=c.userid' ) ->join( array( 'core_members', 'm' ), 'm.name=u.username' ) ->join( array( 'itrader', 'i' ), 'i.rateid=c.rateid' ) ->join( array( 'user', 'u2' ), 'u2.userid=i.rateduserid' ) ->join( array( 'core_members', 'm2' ), 'm2.name=u2.username' ) Если данных в таблице itrader_comments много, можно воспользоваться одним запросом, что значительно уменьшит нагрузку на сервер mysql. 3 этап - пересчёт данных Для этого запустим задачу пересчёта данных, которая есть в приложении. Опять же создадим php файл и запустим его из браузера: <?php require_once 'init.php'; \IPS\Task::queue( 'feedback', 'RecountFeedback' ); На этом перенос завершён!
- 1 комментарий
-
- продажа товаров
- trader
-
(и ещё 1 )
C тегом:
-
Рейтинги позволяют пользователям оценивать элементы контента из 5 или 10 (в зависимости от настроек) звёзд. Как реализовать рейтинги Во-первых, вам необходимо реализовать интерфейс рейтингов в своей модели контента, например: implements \IPS\Content\Ratings Далее добавьте следующие ключи в свойство $databaseColumnMap вашей модели. Это необязательно, но добавление их сделает ваше приложение намного более эффективным при возврате среднего рейтинга при просмотре. Как обычно, значение каждого ключа должно быть именем столбца базы данных, который содержит значение. rating_average - текущий средний рейтинг элемента. rating_total -общая сумма всех рейтингов элемента. rating_hits - количество полученных голосов элементом. Наконец, отобразите рейтинг в шаблоне просмотра контента. Например: {$item->rating()|raw} Дополнительные доступные методы модели boolean canRate( [ \IPS\Member $member ] ) Указывает, имеет ли пользователь разрешение на оценку этого элемента. $member (\IPS\Member, необязательный) - Пользователь, чьи разрешения должны быть проверены. По умолчанию используется текущий авторизованный пользователь. float averageRating() Возвращает средний рейтинг элементов (общий рейтинг, деленный на количество голосов). string rating() Отображает значки звездочек, представляющие текущий средний рейтинг. Если у пользователя есть разрешение на оценку элемента, эти значки будут интерактивными, позволяя пользователю кликнуть, чтобы оценить.