Показ полученных наград на форуме

+38
1.87K
Давно меня друзья просили сделать показ наград на форуме, вместо безликий наград — отображение полученных наград
и так начнем. Изменения коснулось всего 3 файлов

файл 1)
core\classes\user.class.php перед последней закрывающейся скобкой
  1.  
  2. public static function getAwarsGif($user_id) {
  3. if (!$user_id) {
  4. return array();
  5. }
  6. if (isset(self::$cache['users_awards_gif'][$user_id])) {
  7. return self::$cache['users_awards_gif'][$user_id];
  8. }
  9. $sql = "SELECT title, imageurl FROM cms_user_awards WHERE user_id = '$user_id' ORDER BY pubdate DESC";
  10. $result = cmsDatabase::getInstance()->query($sql);
  11. if (!cmsDatabase::getInstance()->num_rows($result)) {
  12. return array();
  13. }
  14. $html = '';
  15. while ($aw = cmsDatabase::getInstance()->fetch_assoc($result)) {
  16. $html .= '<img class="forum_awards" src="/images/users/awards/' . $aw['imageurl'] . '" title= "' . $aw['title'] . '" />';
  17. }
  18. return self::$cache['users_awards_gif'][$user_id] = $html;
  19. }
  20.  
файл 2)
components\forum\model.php находим функцию function getPosts строка примерно 486
меняем
  1. $post['user_awards'] = cmsUser::getAwardsList($post['user_id']);
на
  1. $post['user_awards_gif'] = cmsUser::getAwarsGif($post['user_id']);
файл 3)
\templates\_default_\components\com_forum_view_thread.tpl (если шаблон другой смотрим по аналогии)
меняем
  1.  
  2. {if $post.user_awards}
  3. <div class="post_userawards">
  4. {foreach key=aid item=award from=$post.user_awards}
  5. <img src="/images/icons/award.gif" alt="{$award.title|escape:html}" title="{$award.title|escape:html}"/>
  6. {/foreach}
  7. </div>
  8. {/if}
на
  1. {if $post.user_awards_gif}{$post.user_awards_gif}{/if}
вот собственно и все
P.S. запрос кэшируется т.е. если профиль несколько раз на странице, то запрос будет только один
также по желанию добавляем в css
  1. .forum_awards{width:24px}
0
Реклама Реклама #
0
Сергей Петрович Сергей Петрович 8 лет назад #
Да! Хорошая темка!
0
forlord forlord 8 лет назад #
так же можно сделать и для модуля - доска почета
находим modules\mod_respect\module.php
меняем
Код PHP:
  1. if ($cfg['show_awards']){
  2. $user['awards'] = $inDB->get_table('cms_user_awards', 'user_id='.$user['id'], 'id, title');
  3. }
на
Код PHP:
  1. if ($cfg['show_awards']){
  2. $user['awards'] = cmsUser::getAwarsGif($post['user_id']);
  3. }
и в шаблоне mod_respect.tpl
меняем
Код PHP:
  1. {if $cfg.show_awards}
  2. <div style="margin-top:6px">
  3. {foreach key=id item=award from=$user.awards}
  4. <img src="/images/icons/award.gif" border="0" title="{$award.title|escape:'html'}" />
  5. {/foreach}
  6. </div>
  7. {/if}
на
Код PHP:
  1. {if $cfg.show_awards}<div style="margin-top:6px">{$user.awards}</div>{/if}
0
Dorimen Dorimen 8 лет назад #
Это все для какой версии Instant?
0
forlord forlord 8 лет назад #
версия 1,10
0
PrazdNik PrazdNik 8 лет назад #
Не совсем понял суть. Разве на форуме награды не отображаются?
+2
forlord forlord 8 лет назад #
вместо безликий (одинаковых картинок) выводятся реальные награды
0
AlexandrA AlexandrA 8 лет назад #
Как было

и как стало

Разве не лучше? Пользователи проводящие время на форуме любят подобные "фенечки"
0
Mafio Mafio 8 лет назад #
с логотипом на рисунке ничего не видно................
0
Майкл Майкл 8 лет назад #
Да, картинки сделайте пжл побольше!
0
Таня Таня 8 лет назад #
а как сделать чтоб они не выводились на форуме вообще? а то когда их очень много, смотрится ужасно и место много занимается под сообщение, даже если там всего пару слов.
0
forlord forlord 8 лет назад #
components\forum\model.php находим функцию function getPosts строка примерно 486
закомментировать
Код PHP:
  1. //$post['user_awards'] = cmsUser::getAwardsList($post['user_id']);
0
Таня Таня 8 лет назад #
Спасибо! Только у меня на 1.9 я так понимаю это строка $awards = cmsUser::getAwardsList($user_id);
Закомментировала, медальки исчезли. Еще раз спасибо!
0
Dimson Dimson 8 лет назад #
Для модуля
Не
$user['awards'] = cmsUser::getAwarsGif($post['user_id']);
а
$user['awards'] = cmsUser::getAwarsGif($user['id']);
0
Тимофей Тимофей 8 лет назад #
Задался я тут было вопросом. А если у меня наград 20, то на форуме они будут некрасиво выглядеть. Как ограничить их вывод? Скажем чтобы их было ну скажем не больше 5. Ответ подсказал Алексей(forlord)в файле core\classes\user.class.php
вместо:
Код PHP:
  1. $sql = "SELECT title, imageurl FROM cms_user_awards WHERE user_id = '$user_id' ORDER BY pubdate DESC";
вставляем:
Код PHP:
  1. $sql = "SELECT title, imageurl FROM cms_user_awards WHERE user_id = '$user_id' ORDER BY pubdate DESC LIMIT 5";
где LIMIT 5 это ограничение в 5 наград.

Кому-то это может быть и очевидно. А мне нет. Спасибо Алексей за помощь.
0
fotpod fotpod 3 года назад #
Алексей, приветствую. А не подскажешь как вместо всех наград вывести просто цифру с их количеством? Например если у юзера 7 наград, просто цифру 7. Спасибо.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.