список пользователей в 3 колонки, 4 строки с доп. полями

+37
2.66K
собственно мне не нравится как отображался список пользователей на сайте при переходе на страницу /users/
аватарка ник микростатус если есть и дата последнего посещения… да ещё и всё в строчку… ах да — либо рейтинг, либо карма в зависимости от того, на что нажать вверху… но тут набрёл на блог "Кнопки Добавить в друзья и Отправить сообщение в Списке Пользователей — Хак" — поставил, понравилось, но всё ровно что то не то. а если учесть что система у нас в первую очередь направлена как соц сеть… то что то хотелось от одноклассников и вконтакте… думал думал и вот что надумал сделать вывод пользователей в несколько колонок.
первым делом необходимо установить хак DagStudent — опишу как дабы вам не искать его… (сделал копипаст)
убираем себя из списка пользователей, то есть вы не увидите себя в списке
1. В файле /components/users/frontend.php находим:
  1. if ($is_users){
  2. while($usr = $inDB->fetch_assoc($result)){
  3. $rownum++;
  4. $usr['avatar'] = usrLink(usrImageNOdb($usr['id'], 'small', $usr['imageurl'], $usr['is_deleted']), $usr['login'], $menuid);
  5. $usr['nickname'] = cmsUser::getProfileLink($usr['login'], $usr['nickname']);
  6. $usr['flogdate'] = $inCore->dateFormat($usr['flogdate'], true, true);
  7. $usr['status'] = usrStatusList($usr['id'], $usr['flogdate'], false, $usr['gender']);
  8. $usr['num'] = $rownum + ($page-1)*$perpage;
  9. $usr['isfriend'] = (($inUser->id && !$myprofile) ? usrIsFriends($usr['id'], $inUser->id) : false);
  10.  
  11. if (($orderby!='karma' || $orderto!='asc') || strip_tags($usr['karma'])<0){
  12. $users[] = $usr;
  13. }
  14. }
  15. }
меняем на
  1. if ($is_users){
  2. while($usr = $inDB->fetch_assoc($result)){
  3. if ($usr['id']!=$inUser->id){
  4. $rownum++;
  5. $usr['avatar'] = usrLink(usrImageNOdb($usr['id'], 'small', $usr['imageurl'], $usr['is_deleted']), $usr['login'], $menuid);
  6. $usr['nickname'] = cmsUser::getProfileLink($usr['login'], $usr['nickname']);
  7. $usr['flogdate'] = $inCore->dateFormat($usr['flogdate'], true, true);
  8. $usr['status'] = usrStatusList($usr['id'], $usr['flogdate'], false, $usr['gender']);
  9. $usr['num'] = $rownum + ($page-1)*$perpage;
  10. $usr['isfriend'] = (($inUser->id && !$myprofile) ? usrIsFriends($usr['id'], $inUser->id) : false);
  11.  
  12. if (($orderby!='karma' || $orderto!='asc') || strip_tags($usr['karma'])<0){
  13. $users[] = $usr;
  14. }
  15. }
  16. }
  17. }
далее я делал по второму пути
  1. Гостям будут показываться кнопки Добавить в друзья и Написать Сообщение но при нажатии на них их перекинет на страницу авторизации
поэтому в файле /components/users/frontend.php найдите это:
в разделе
  1. ////// ADD FRIEND /////////
  1. if (!usrCheckAuth() || $inUser->id == $id) { cmsCore::error404(); }
и замените на это
  1. if (!usrCheckAuth() || $inUser->id == $id) { cmsUser::goToLogin(); }
далее в этом же файле в разделе
  1. //// VIEW USERS LIST ////
находим
  1. $perpage = 10;
меняем на (для отображения на странице не 10 а 12 пользователей, так как 3х4=12, можем задать своё число)
  1. $perpage = 12;
находим
  1.  
  2. $rownum = 0; $users = array();
  3. if ($is_users){
  4. while($usr = $inDB->fetch_assoc($result)){
  5. $rownum++;
  6. $usr['avatar'] = usrLink(usrImageNOdb($usr['id'], 'small', $usr['imageurl'], $usr['is_deleted']), $usr['login'], $menuid);
  7. $usr['nickname'] = cmsUser::getProfileLink($usr['login'], $usr['nickname']);
  8. $usr['flogdate'] = $inCore->dateFormat($usr['flogdate'], true, true);
  9. $usr['status'] = usrStatusList($usr['id'], $usr['flogdate'], false, $usr['gender']);
  10. $usr['num'] = $rownum + ($page-1)*$perpage;
  11.  
  12. if (($orderby!='karma' || $orderto!='asc') || strip_tags($usr['karma'])<0){
  13. $users[] = $usr;
  14. }
  15. }
  16. }
  17.  
меняем на
  1.  
  2.  
  3. $rownum = 0; $users = array();
  4. if ($is_users){
  5. while($usr = $inDB->fetch_assoc($result)){
  6. if ($usr['id']!=$inUser->id){
  7. $rownum++;
  8. $usr['avatar'] = usrLink(usrImageNOdb($usr['id'], 'small', $usr['imageurl'], $usr['is_deleted']), $usr['login'], $menuid);
  9. $usr['nickname'] = cmsUser::getProfileLink($usr['login'], $usr['nickname']);
  10. $usr['flogdate'] = $inCore->dateFormat($usr['flogdate'], true, true);
  11. $usr['status'] = usrStatusList($usr['id'], $usr['flogdate'], false, $usr['gender']);
  12. $usr['num'] = $rownum + ($page-1)*$perpage;
  13. $usr['isfriend'] = (($inUser->id && !$myprofile) ? usrIsFriends($usr['id'], $inUser->id) : false);
  14.  
  15. $usr['albums'] = $model->getPhotoAlbums($usr['id'], $usr['isfriend']);
  16. $usr['albums_total'] = sizeof($usr['albums']);
  17. $usr['albums_show'] = $usr['albums_total'];
  18. $usr['blog_link'] = '';
  19. $usr['blog'] = usrBlog($usr['id']);
  20. $usr['blog_id'] = $usr['blog']['id'];
  21. $usr['blog_seolink'] = $usr['blog']['seolink'];
  22. if($usr['blog_id']){
  23. $usr['blog_link'] = '<a href="/blogs/'.$usr['blog_seolink'].'">'.$_LANG['BLOG'].'</a>';
  24. } elseif($myprofile) {
  25. $usr['blog_link'] = '<a href="/blogs/createblog.html">'.$_LANG['CREATE_BLOG'].'</a>';
  26. }
  27. $usr['genderimg'] = '';
  28. if ($usr['gender']) {
  29. switch ($usr['gender']){
  30. case 'm': $usr['genderimg'] = '<img src="/components/users/images/m.png"/>'; $usr['gender']=$_LANG['MALES']; break;
  31. case 'f': $usr['genderimg'] = '<img src="/components/users/images/f.png"/>'; $usr['gender']=$_LANG['FEMALES']; break;
  32. }
  33. }
  34. $usr['cityurl'] = urlencode($usr['city']);
  35.  
  36. if (($orderby!='karma' || $orderto!='asc') || strip_tags($usr['karma'])<0){
  37. $users[] = $usr;
  38. }
  39. }
  40. }
  41. }
  42.  
  43.  
теперь переходим к правке шаблона
/templates/ВАШ_ШАБЛОН/components/com_users_view.tpl
он состоит из 2-х частей — первая отвечает за поиск, вторая за вывод пользователей, будем править вывод пользователей...
находим
  1.  
  2. {if $querymsg}
  3. <div class="users_search_results">{$querymsg}</div>
  4. {/if}
  5.  
и после этого кода заменяем всё на следующий код
  1.  
  2. <table width="100%" cellspacing="0" cellpadding="0" class="users_layout" border=0 >
  3. <tr>
  4. <td width="" valign="top">
  5.  
  6.  
  7. {* ========================= СПИСОК ПОЛЬЗОВАТЕЛЕЙ ============================*}
  8. {php} global $_CFG;
  9. $mytemplate = ($_CFG['template']);
  10.  
  11. {/php}
  12. <div class="users_list_buttons">
  13. <div class="button {if $link.selected=='latest'}selected{/if}"><a rel=”nofollow” href="{$link.latest}">{$LANG.LATEST}</a></div>
  14. <div class="button {if $link.selected=='positive'}selected{/if}"><a rel=”nofollow” href="{$link.positive}">{$LANG.POSITIVE}</a></div>
  15. <div class="button {if $link.selected=='rating'}selected{/if}"><a rel=”nofollow” href="{$link.rating}">{$LANG.RATING}</a></div>
  16. </div>
  17. <div class="users_list">
  18. <table cellspacing="0" cellpadding="0" class="users_list" border=0 >
  19. {if $is_users}
  20. {php}$row=0;{/php}<tr>
  21.  
  22. {foreach key=tid item=usr from=$users}
  23.  
  24. <td width="31%" valign="top"><div class="users_list_blok">
  25. <table width="100%" cellspacing="0" cellpadding="0" border=0 >
  26. <tr><td valign="top"><center><div class="avatar">{$usr.avatar}</div></center></td>
  27. <td valign="top">
  28. <div class="nickname">{$usr.nickname}{if $usr.gender} {$usr.genderimg}{/if}</div>
  29. <div class="status">{$usr.status}</div>
  30.  
  31. {if $usr.city}
  32. <div class="value"><a href="/users/city/{$usr.cityurl}">{$usr.city}</a></div>
  33. {/if}
  34.  
  35. {* {if $link.selected=='rating'} *}
  36. <div class="rating" title="{$LANG.RATING}">{$LANG.RATING}: {$usr.rating}</div>
  37. {* {/if} *}
  38. {* {if $link.selected=='positive'} *}
  39. <div title="{$LANG.KARMA}" class="karma{if $usr.karma > 0} pos{/if}{if $usr.karma < 0} neg{/if}">{$LANG.KARMA}: {if $usr.karma > 0}+{/if}{$usr.karma}</div>
  40. {* {/if} *}
  41. {if $usr.microstatus}
  42. </td></tr><tr><td colspan="2">
  43. <div class="microstatus">{$usr.microstatus}</div>
  44. {/if}
  45. </td></tr><tr><td colspan="2">
  46. <table width="100%" cellspacing="0" cellpadding="0" border=0 >
  47. {if !$usr.isfriend}
  48. <tr>
  49. {if !$usr.isfriend_not_add}
  50. <td><img src="/templates/{php}echo $mytemplate;{/php}/images/icons/profile/friends.png" /></td>
  51. <td><a href="/users/{$usr.id}/friendship.html" title="{$LANG.ADD_TO_FRIEND}">{$LANG.ADD_TO_FRIEND}</a></td>
  52. {else}
  53. <td><img src="/templates/{php}echo $mytemplate;{/php}/images/icons/profile/nofriends.png" /></td>
  54. <td><a href="/users/{$usr.id}/nofriends.html" title="{$LANG.STOP_FRIENDLY}">{$LANG.STOP_FRIENDLY}</a></td>
  55. {/if}
  56. </tr>
  57. {else}
  58. <tr>
  59. <td><img src="/templates/{php}echo $mytemplate;{/php}/images/icons/profile/nofriends.png" /></td>
  60. <td><a href="/users/{$usr.id}/nofriends.html" title="{$LANG.STOP_FRIENDLY}">{$LANG.STOP_FRIENDLY}</a></td>
  61. </tr>
  62. {/if}
  63. <tr>
  64. <td><img src="/templates/{php}echo $mytemplate;{/php}/images/icons/profile/message.png" /></td>
  65. <td><a href="/users/{$usr.id}/sendmessage.html" title="{$LANG.WRITE_MESS}">{$LANG.WRITE_MESS}</a></td>
  66. </tr>
  67. {if $usr.albums}
  68. <tr>
  69. <td><img src="/templates/{php}echo $mytemplate;{/php}/images/icons/big/images.png" /></td>
  70. <td><a href="/users/{$usr.id}/photoalbum.html">Альбомы пользователя</a> ({$usr.albums_total})</td>
  71. </tr>
  72. {/if}
  73. {if $usr.blog_link}
  74. <tr>
  75. <td><img src="/templates/{php}echo $mytemplate;{/php}/images/icons/big/blog.png" /></td>
  76. <td>{$usr.blog_link}</td>
  77. </tr>
  78. {/if}
  79. </table>
  80. </div>
  81. </td></tr>
  82. </table>
  83. </td>
  84.  
  85. {php}$row++;{/php}
  86.  
  87. {php}if (!($row % 3)) {echo '</tr><tr>'; }{/php}
  88. {/foreach}</tr>
  89. {else}
  90. <tr>
  91. <td>
  92. <p>{$LANG.USERS_NOT_FOUND}.</p>
  93. </td>
  94. </tr>
  95. {/if}
  96. </table>
  97. </div>
  98. {if (isset($pagebar) && ($orderby!='karma'||$orderto!='asc'))} {$pagebar} {/if}
  99. </td>
  100. </tr>
  101. </table>
  102.  
сохраняем
ах да копируем две картинки в папку components/users/images/ instantcms.ru/users/files/download1402.html
и ещё добавляем в фаил стилей styles.css следующий код для того, чтоб пользователь был в рамке и был отступ от соседней карточки пользователя
  1. div.users_list_blok {
  2. margin:15px 5px;
  3. padding:15px;
  4. border:1px solid #C3D6DF;
  5. border-radius:10px;
  6. -moz-border-radius:10px;
  7. }
  8.  
демо тут sakhrest.ru/users/rating.html
большая часть данных выводится если они заполнены пользователем, и я ограничился кнопками добавить в друзья, отправить сообщение, альбомы пользователя и блог пользователя, теоретически можно добавить и другие кнопки — но мне они не нужны были, поэтому я и не делал
ps — некоторым ничего не надо подправлять в своих стилях, чтобы всё было ровно, а некоторым придётся поиграться, так как шаблоны то у всех разные, у меня к примеру в одном шаблоне всё нормально, в другом карма и рейтинг съежают

исправлено
* поиск по городу
* растягивание карточки на весь экран при выводе 1 или 2 пользователей в списке
+1
bondar bondar 13 лет назад #
круть)
+1
Sergey Platonov Sergey Platonov 13 лет назад #
говорю же - ну не понравился мне стандартный вывод пользователей - решил модернизировать - получилась как некоторые говорят конфетка (моё мнение такое же ... )
0
Boffka Boffka 13 лет назад #
Согласен:)
+1
Sergey Platonov Sergey Platonov 13 лет назад #
а главное отдаю бесплатно )))
0
Boffka Boffka 13 лет назад #
за это и толстый +)))))
0
джин джин 13 лет назад #
Отличная работа! Спасибо. +1
0
Sergey Platonov Sergey Platonov 13 лет назад #
нагрузки никакой быть не должно, так как никакие дополнительные запросы в базу не делаются, только в шаблон передаются дополнительные данные.
если кому надо вывести какие либо ещё данные которые выводятся в профиле пользователя - могу доработать.
0
abasia abasia 13 лет назад #
Здорово, огромное спасибо.
0
lezginka.ru lezginka.ru 13 лет назад #
а где на конфету посмотреть ?
0
Sergey Platonov Sergey Platonov 13 лет назад #
внизу статьи ж написано - демо и сыль (на стиль шаба не смотрите, после коментов на форуме с просьбой оценить сайт менюшку буду переделывать, да и вообще подпиливать шаб)
0
Cleverking Cleverking 13 лет назад #
А на две колонки реально сделать?
0
Sergey Platonov Sergey Platonov 13 лет назад #
можно и на две
исправить в коде (если не ошибаюсь) строку
Код PHP:
            {php}if (!($row % 3)) {echo '</tr><tr>'; }{/php}
на
Код PHP:
            {php}if (!($row % 2)) {echo '</tr><tr>'; }{/php}
в 4 колонки не советую, на нетбуках плохо отображается.... да и вообще каждому нужно подправлять стили под свой шаблон
0
Man Man 13 лет назад #
Только что сделал у себя такое, пока только на одном сайте.
Смотрится просто отлично! У меня как раз сайт посвящен актерам и моделям. Там это получилось кстати!
Автору и DagStudentu - РЕСПЕКТ !

Вот таких бы усовершенствований побольше!
+1
Ingvarruss Ingvarruss 13 лет назад #
Просто супер!
+1
Виктор Кел Виктор Кел 13 лет назад #

МОЛОДЕЦ!!!!

БОЛЬШУЩЕЕ СПАСИБО !!!! :))
0
Максим Шорин Максим Шорин 13 лет назад #
Однозначно + ! МОЛОДЕЦ !
0
livecom livecom 13 лет назад #
Немного подправьте CSS. Всегда лучше, если по ширине и высоте все блоки будут одинаковыми. Мой +
0
Sergey Platonov Sergey Platonov 13 лет назад #
по ширине они как раз одинаковые, я как раз от этого и исходил при создании, а вот по высоте - там всё зависит от того, как заполнен провиль у юзера - поля в профиле запонены, значит есть - не заполнены, нету...
по поводу css - у каждого свои вкусы, я стандартные классы всюду практическа использовл, за исключением рамки вокруг карточки юзера
+1
Click Click 13 лет назад #
Заработало при удалении последней фигурной скобки в первом заменяемом куске кода в файле frontend.php. И в две колонки тоже прекрасно работает. Проверял на Денвере.
Однако от установки на действующий сайт пришлось отказаться, т.к. при нажатии на город у пользователя поиск по городам происходит некорректно, если город написан русскими буквами. На Вашем сайте тоже такая беда - см. скрин:



Не работает кодировка при запросе?
Если город написан латинскими буквами, то всё в порядке.
И ещё. Если список выдаёт одного пользователя, то инфа в блоке растягивается на всю страницу, карма и рейтинг съезжает в сторону... Всё, как Вы и предупреждали! )) Буду копаться.
В целом плюсую за хорошее решение!
0
Sergey Platonov Sergey Platonov 13 лет назад #
большое спасибо за данные замечания, хоть и делалась данная модификация почти весь день и проверялась - всё не проверишь... посмотрел - и вправду всё как вы описали . со скобкой - там должно быть именно 4 закрывающихся, видать не всюду убрали когда копировали и заменяли - но спорить не буду.

по поводу описанного вами предлагаю исправления

исправляем поиск по городу
открываем /components/users/frontend.php
находим
Код PHP:
if (($orderby!='karma' || $orderto!='asc') || strip_tags($usr['karma'])<0){
вставляем перед
Код PHP:
    $usr['cityurl']             = urlencode($usr['city']);
открываем /templates/ВАШ_ШАБЛОН/components/com_users_view.tpl
находим
Код PHP:
                        {if $usr.city}
                            <div class="value"><a href="/users/city/{$usr.city}">{$usr.city}</a></div>
                        {/if}
заменяем на
Код PHP:
                        {if $usr.city}
                            <div class="value"><a href="/users/city/{$usr.cityurl}">{$usr.city}</a></div>
                        {/if}
исправляем растягивание на весь экран при выводе одного или двух пользователей на странице
открываем /templates/ВАШ_ШАБЛОН/components/com_users_view.tpl
находим
Код PHP:
                    <table width="99%" cellspacing="0" cellpadding="0" class="users_list" border=0 >
заменяем на
Код PHP:
                    <table cellspacing="0" cellpadding="0" class="users_list" border=0 >
на этом пока всё
ps - в посте подправил
0
Click Click 13 лет назад #
Как оперативно!.. Спасибо! Будем пробовать! ))
0
Sergey Platonov Sergey Platonov 13 лет назад #
стараюсь ))) сделал отдельную запись у себя в блоге с этими исправлениями, так как много человек уже поставили себе данную модификацию.
ps - вот бы пролетел как еслиб решил данную модификацию продавать ... а была такая идея, ведь любой труд должен быть вознаграждён
0
Денис Васильевич Денис Васильевич 13 лет назад #
для тех кто использует мой шаблон #4. добавил эту наработку с оформлением для шаблона #4
смотрите здесь

надеюсь что Sergey Platonov не против. :)
0
Sergey Platonov Sergey Platonov 13 лет назад #
я конечно же не против - о чём разговор ... только надеюсь вы уже внесли изменения которые я подправил (поиск по городу и фиксация если отображается один или два пользователя в списке) а то на продажу выставлять с багами - вас люди не поймут как минимум

ps - скоро выложу описание небольшой модификации самой страницы профиля(ну и она мне тож немного не нравится, а тут человек попросил её модифицировать, получилось нормально)
0
Денис Васильевич Денис Васильевич 13 лет назад #
исправления я тоже учел. и добавил центрирование блоков.
Спасибо.
0
Крот Крот 13 лет назад #
а целиком файлы чтобы скачать? я сам бы посмотрел чем отличаются)
0
Sergey Platonov Sergey Platonov 13 лет назад #
теоретически можно дать всё, смотря как попросить - вот только смысл давать полностью, если у меня во первых могут там быть свои доработки в другие направления (я ж не только это правлю) ну и во вторых у меня стили свои - у вас свои, ну и в третьих - я тут подробнейшим образом описал что и как ... вам только открыть, найти, изменить, сохранить. а вот если вы просто хотите заменить свои файлы оригинальные на мои - тогда б так и написали...
0
Крот Крот 13 лет назад #
нужно только для сравнения с оригиналом разработчиков... т.е. для скорости - скопировал в чистую настройку, посмотрел... понравилось, использовал.
Ну раз есть еще другие доработки то не могу настаивать на получении, сам иногда не все показываю)))
0
БИБАБО БИБАБО 13 лет назад #
Пользователь сам себя не видит в рейтинге, в позитивных... наверно это не правильно.
0
Sergey Platonov Sergey Platonov 13 лет назад #
да пользователь не видит себя в списке пользователей, это сделано, чтоб он не мог сделать попытку сам себя добавить в друзья или написать себе письмо

Еще от автора

Модуль для бесплатной версии компонента "Попутчики" автора Олег
и так представляю вашему вниманию модуль для бесплатной версии компонента "Попутчики" написанной Олегом.
список всех Event-ов системы
решил отдохнуть минут пять от подготовки к госам - полез сюда на сайт, прочитал такую строку в комментах в одном из последних блогов пришла идея разыс
[Хак] Выйти/войти и остаться на той же странице
где то видел на форуме тему про редирект при логине \ разлогине - как остаться на той же самой странице, если у вас стоит форма входа на всех страница
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.