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

2070
собственно мне не нравится как отображался список пользователей на сайте при переходе на страницу /users/
аватарка ник микростатус если есть и дата последнего посещения .... да ещё и всё в строчку .... ах да - либо рейтинг, либо карма в зависимости от того, на что нажать вверху ... но тут набрёл на блог "Кнопки Добавить в друзья и Отправить сообщение в Списке Пользователей - Хак" - поставил, понравилось, но всё ровно что то не то. а если учесть что система у нас в первую очередь направлена как соц сеть... то что то хотелось от одноклассников и вконтакте... думал думал и вот что надумал сделать вывод пользователей в несколько колонок.  
первым делом необходимо установить хак DagStudent - опишу как дабы вам не искать его... (сделал копипаст)
убираем себя из списка пользователей, то есть вы не увидите себя в списке
1. В файле /components/users/frontend.php находим:
Код PHP:
if ($is_users){
	while($usr = $inDB->fetch_assoc($result)){
			$rownum++;
			$usr['avatar'] = usrLink(usrImageNOdb($usr['id'], 'small', $usr['imageurl'], $usr['is_deleted']), $usr['login'], $menuid);
			$usr['nickname'] = cmsUser::getProfileLink($usr['login'], $usr['nickname']);
			$usr['flogdate'] = $inCore->dateFormat($usr['flogdate'], true, true);
			$usr['status'] = usrStatusList($usr['id'], $usr['flogdate'], false, $usr['gender']);
			$usr['num'] = $rownum + ($page-1)*$perpage;
			$usr['isfriend'] = (($inUser->id && !$myprofile) ? usrIsFriends($usr['id'], $inUser->id) : false);
			
            if (($orderby!='karma' || $orderto!='asc') || strip_tags($usr['karma'])<0){
                $users[] = $usr;
            }
		}
	}
меняем на
Код PHP:
if ($is_users){
	while($usr = $inDB->fetch_assoc($result)){
		if ($usr['id']!=$inUser->id){
			$rownum++;
			$usr['avatar'] = usrLink(usrImageNOdb($usr['id'], 'small', $usr['imageurl'], $usr['is_deleted']), $usr['login'], $menuid);
			$usr['nickname'] = cmsUser::getProfileLink($usr['login'], $usr['nickname']);
			$usr['flogdate'] = $inCore->dateFormat($usr['flogdate'], true, true);
			$usr['status'] = usrStatusList($usr['id'], $usr['flogdate'], false, $usr['gender']);
			$usr['num'] = $rownum + ($page-1)*$perpage;
			$usr['isfriend'] = (($inUser->id && !$myprofile) ? usrIsFriends($usr['id'], $inUser->id) : false);
			
            if (($orderby!='karma' || $orderto!='asc') || strip_tags($usr['karma'])<0){
                $users[] = $usr;
            }
		}
	}
}
далее я делал по второму пути
Код PHP:
Гостям будут показываться кнопки Добавить в друзья и Написать Сообщение но при нажатии на них их перекинет на страницу авторизации
поэтому в файле /components/users/frontend.php найдите это:
в разделе
Код PHP:
////// ADD FRIEND /////////
Код PHP:
if (!usrCheckAuth() || $inUser->id == $id) { cmsCore::error404(); }
и замените на это
Код PHP:
if (!usrCheckAuth() || $inUser->id == $id) { cmsUser::goToLogin(); }
далее в этом же файле в разделе
Код PHP:
//// VIEW USERS LIST ////
находим
Код PHP:
	$perpage = 10;
меняем на (для отображения на странице не 10 а 12 пользователей, так как 3х4=12, можем задать своё число)
Код PHP:
	$perpage = 12;
находим
Код PHP:
		$rownum = 0; $users = array();
		if ($is_users){
			while($usr = $inDB->fetch_assoc($result)){                
					$rownum++;
					$usr['avatar'] = usrLink(usrImageNOdb($usr['id'], 'small', $usr['imageurl'], $usr['is_deleted']), $usr['login'], $menuid);
					$usr['nickname'] = cmsUser::getProfileLink($usr['login'], $usr['nickname']);
					$usr['flogdate'] = $inCore->dateFormat($usr['flogdate'], true, true);
					$usr['status'] = usrStatusList($usr['id'], $usr['flogdate'], false, $usr['gender']);
					$usr['num'] = $rownum + ($page-1)*$perpage;

                    if (($orderby!='karma' || $orderto!='asc') || strip_tags($usr['karma'])<0){
                        $users[] = $usr;
                    }
			}
		}
меняем на
Код PHP:
		$rownum = 0; $users = array();
if ($is_users){
	while($usr = $inDB->fetch_assoc($result)){
		if ($usr['id']!=$inUser->id){
			$rownum++;
			$usr['avatar'] = usrLink(usrImageNOdb($usr['id'], 'small', $usr['imageurl'], $usr['is_deleted']), $usr['login'], $menuid);
			$usr['nickname'] = cmsUser::getProfileLink($usr['login'], $usr['nickname']);
			$usr['flogdate'] = $inCore->dateFormat($usr['flogdate'], true, true);
			$usr['status'] = usrStatusList($usr['id'], $usr['flogdate'], false, $usr['gender']);
			$usr['num'] = $rownum + ($page-1)*$perpage;
			$usr['isfriend'] = (($inUser->id && !$myprofile) ? usrIsFriends($usr['id'], $inUser->id) : false);

        $usr['albums']          = $model->getPhotoAlbums($usr['id'], $usr['isfriend']);
        $usr['albums_total']    = sizeof($usr['albums']);
        $usr['albums_show']     = $usr['albums_total'];
    $usr['blog_link'] = '';
    $usr['blog']            = usrBlog($usr['id']);
    $usr['blog_id']         = $usr['blog']['id'];
    $usr['blog_seolink']    = $usr['blog']['seolink'];
    if($usr['blog_id']){
        $usr['blog_link'] 		= '<a href="/blogs/'.$usr['blog_seolink'].'">'.$_LANG['BLOG'].'</a>';
    } elseif($myprofile) {
        $usr['blog_link'] 		= '<a href="/blogs/createblog.html">'.$_LANG['CREATE_BLOG'].'</a>';
    }
    $usr['genderimg']			= '';
    if ($usr['gender']) {
        switch ($usr['gender']){
            case 'm': $usr['genderimg'] = '<img src="/components/users/images/m.png"/>'; $usr['gender']=$_LANG['MALES']; break;
            case 'f': $usr['genderimg'] = '<img src="/components/users/images/f.png"/>'; $usr['gender']=$_LANG['FEMALES']; break;
        }
    }
    $usr['cityurl']             = urlencode($usr['city']);

            if (($orderby!='karma' || $orderto!='asc') || strip_tags($usr['karma'])<0){
                $users[] = $usr;
            }
		}
	}
}

теперь переходим к правке шаблона
/templates/ВАШ_ШАБЛОН/components/com_users_view.tpl
он состоит из 2-х частей - первая отвечает за поиск, вторая за вывод пользователей, будем править вывод пользователей...
находим
Код PHP:
    {if $querymsg}
        <div class="users_search_results">{$querymsg}</div>
    {/if}
и после этого кода заменяем всё на следующий код
Код PHP:
	<table width="100%" cellspacing="0" cellpadding="0" class="users_layout" border=0 >
		<tr>
			<td width="" valign="top">


{* ========================= СПИСОК ПОЛЬЗОВАТЕЛЕЙ ============================*}				
{php}		global $_CFG;
		$mytemplate = ($_CFG['template']);

{/php}
				<div class="users_list_buttons">
					<div class="button {if $link.selected=='latest'}selected{/if}"><a rel=”nofollow” href="{$link.latest}">{$LANG.LATEST}</a></div>
					<div class="button {if $link.selected=='positive'}selected{/if}"><a rel=”nofollow” href="{$link.positive}">{$LANG.POSITIVE}</a></div>
					<div class="button {if $link.selected=='rating'}selected{/if}"><a rel=”nofollow” href="{$link.rating}">{$LANG.RATING}</a></div>					
				</div>
				<div class="users_list">
					<table cellspacing="0" cellpadding="0" class="users_list" border=0 >
						{if $is_users}
 {php}$row=0;{/php}<tr>

							{foreach key=tid item=usr from=$users}
								
								<td width="31%" valign="top"><div class="users_list_blok">
										<table width="100%" cellspacing="0" cellpadding="0" border=0 >
										<tr><td valign="top"><center><div class="avatar">{$usr.avatar}</div></center></td>
<td valign="top">
					<div class="nickname">{$usr.nickname}{if $usr.gender}  {$usr.genderimg}{/if}</div>
                                        <div class="status">{$usr.status}</div>

                        {if $usr.city}
                            <div class="value"><a href="/users/city/{$usr.cityurl}">{$usr.city}</a></div>
                        {/if}
									
                                        {* {if $link.selected=='rating'}  *}
                                            <div class="rating" title="{$LANG.RATING}">{$LANG.RATING}: {$usr.rating}</div>
                                       {* {/if} *}
                                        {* {if $link.selected=='positive'} *}
                                            <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>
                                        {* {/if} *}
                                        {if $usr.microstatus}
</td></tr><tr><td colspan="2">
                                            <div class="microstatus">{$usr.microstatus}</div>
                                        {/if}
</td></tr><tr><td colspan="2">
<table width="100%" cellspacing="0" cellpadding="0" border=0 >
	{if !$usr.isfriend}
                                    <tr>
                                        {if !$usr.isfriend_not_add}
                                        <td><img src="/templates/{php}echo $mytemplate;{/php}/images/icons/profile/friends.png" border="0"/></td>
                                        <td><a href="/users/{$usr.id}/friendship.html" title="{$LANG.ADD_TO_FRIEND}">{$LANG.ADD_TO_FRIEND}</a></td>
                                        {else}
                                        <td><img src="/templates/{php}echo $mytemplate;{/php}/images/icons/profile/nofriends.png" border="0"/></td>
                                        <td><a href="/users/{$usr.id}/nofriends.html" title="{$LANG.STOP_FRIENDLY}">{$LANG.STOP_FRIENDLY}</a></td>
                                        {/if}
                                    </tr>
                                {else}
                                <tr>
                                    <td><img src="/templates/{php}echo $mytemplate;{/php}/images/icons/profile/nofriends.png" border="0"/></td>
                                    <td><a href="/users/{$usr.id}/nofriends.html" title="{$LANG.STOP_FRIENDLY}">{$LANG.STOP_FRIENDLY}</a></td>
                                </tr>
	{/if} 
			<tr>
                                    <td><img src="/templates/{php}echo $mytemplate;{/php}/images/icons/profile/message.png" border="0"/></td>
                                    <td><a href="/users/{$usr.id}/sendmessage.html" title="{$LANG.WRITE_MESS}">{$LANG.WRITE_MESS}</a></td>
			</tr>
{if $usr.albums}
			<tr>
                                    <td><img src="/templates/{php}echo $mytemplate;{/php}/images/icons/big/images.png" border="0"/></td>
                                    <td><a href="/users/{$usr.id}/photoalbum.html">Альбомы пользователя</a> ({$usr.albums_total})</td>
			</tr>
{/if}
{if $usr.blog_link}
			<tr>
                                    <td><img src="/templates/{php}echo $mytemplate;{/php}/images/icons/big/blog.png" border="0"/></td>
                                    <td>{$usr.blog_link}</td>
			</tr>
{/if}
			</table>
			</div>
			</td></tr>
			</table> 
			</td>
                                		
            {php}$row++;{/php}
							
            {php}if (!($row % 3)) {echo '</tr><tr>'; }{/php}
{/foreach}</tr>
						{else}
							<tr>
								<td>
									<p>{$LANG.USERS_NOT_FOUND}.</p>
								</td>
							</tr>
						{/if}
					</table>					
				</div>
				{if (isset($pagebar) && ($orderby!='karma'||$orderto!='asc'))} {$pagebar}	{/if}
			</td>
		</tr>
	</table>		
сохраняем
ах да копируем две картинки в папку components/users/images/ /users/files/download1402.html
и ещё добавляем в фаил стилей styles.css следующий код для того, чтоб пользователь был в рамке и был отступ от соседней карточки пользователя
Код PHP:
div.users_list_blok { 
	margin:15px 5px; 
	padding:15px; 
	border:1px solid #C3D6DF;
	border-radius:10px;
	-moz-border-radius:10px;
}
демо тут http://sakhrest.ru/users/rating.html
большая часть данных выводится если они заполнены пользователем, и я ограничился кнопками добавить в друзья, отправить сообщение, альбомы пользователя и блог пользователя, теоретически можно добавить и другие кнопки - но мне они не нужны были, поэтому я и не делал
ps - некоторым ничего не надо подправлять в своих стилях, чтобы всё было ровно, а некоторым придётся поиграться, так как шаблоны то у всех разные, у меня к примеру в одном шаблоне всё нормально, в другом карма и рейтинг съежают

исправлено
* поиск по городу
* растягивание карточки на весь экран при выводе 1 или 2 пользователей в списке
Сортировка в модуле последние материалы с выбором через админ-панель | небольшое исправление плагина Мои гости автора HolyGun
Комментарии (30)
krz 27 сентября 2011 в 16:05 +1
круть)
Sergey Platonov 27 сентября 2011 в 16:08 +1
говорю же - ну не понравился мне стандартный вывод пользователей - решил модернизировать - получилась как некоторые говорят конфетка (моё мнение такое же ... )
Boffka 27 сентября 2011 в 16:10 0
Согласен:)
Sergey Platonov 27 сентября 2011 в 16:12 +1
а главное отдаю бесплатно )))
Boffka 27 сентября 2011 в 16:19 0
за это и толстый +)))))
джин 27 сентября 2011 в 16:57 0
Отличная работа! Спасибо. +1
Sergey Platonov 27 сентября 2011 в 17:01 0
нагрузки никакой быть не должно, так как никакие дополнительные запросы в базу не делаются, только в шаблон передаются дополнительные данные.
если кому надо вывести какие либо ещё данные которые выводятся в профиле пользователя - могу доработать.
abasia 27 сентября 2011 в 17:11 0
Здорово, огромное спасибо.
lezginka.ru 27 сентября 2011 в 17:18 0
а где на конфету посмотреть ?
Sergey Platonov 27 сентября 2011 в 17:39 0
внизу статьи ж написано - демо и сыль (на стиль шаба не смотрите, после коментов на форуме с просьбой оценить сайт менюшку буду переделывать, да и вообще подпиливать шаб)
Cleverking 27 сентября 2011 в 18:14 0
А на две колонки реально сделать?
Sergey Platonov 27 сентября 2011 в 18:23 0
можно и на две
исправить в коде (если не ошибаюсь) строку
Код PHP:
            {php}if (!($row % 3)) {echo '</tr><tr>'; }{/php}
на
Код PHP:
            {php}if (!($row % 2)) {echo '</tr><tr>'; }{/php}
в 4 колонки не советую, на нетбуках  плохо отображается.... да и вообще каждому нужно подправлять стили под свой шаблон
Man 28 сентября 2011 в 00:46 0
Только что сделал у себя такое, пока только на одном сайте.
Смотрится просто отлично! У меня как раз сайт посвящен актерам и моделям. Там это получилось кстати!
Автору и DagStudentu - РЕСПЕКТ !

Вот таких бы усовершенствований побольше!
Ingvarruss 27 сентября 2011 в 18:36 +1
Просто супер!
Виктор Кел 28 сентября 2011 в 01:35 +1

МОЛОДЕЦ!!!!

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



Не работает кодировка при запросе?
Если город написан латинскими буквами, то всё в порядке.
И ещё. Если список выдаёт одного пользователя, то инфа в блоке растягивается на всю страницу, карма и рейтинг съезжает в сторону... Всё, как Вы и предупреждали! )) Буду копаться.
В целом плюсую за хорошее решение!
Sergey Platonov 29 сентября 2011 в 09:03 0
большое спасибо за данные замечания, хоть и делалась данная модификация почти весь день и проверялась - всё не проверишь... посмотрел - и вправду всё как вы описали . со скобкой - там должно быть именно 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 - в посте подправил
Click 29 сентября 2011 в 09:34 0
Как оперативно!.. Спасибо! Будем пробовать! ))
Sergey Platonov 29 сентября 2011 в 09:44 0
стараюсь ))) сделал отдельную запись у себя в блоге с этими исправлениями, так как много человек уже поставили себе данную модификацию.
ps - вот бы пролетел как еслиб решил данную модификацию продавать ... а была такая идея, ведь любой труд должен быть вознаграждён
GoodMade.ru 30 сентября 2011 в 18:26 0
для тех кто использует мой шаблон #4. добавил эту наработку с оформлением для шаблона #4
смотрите здесь

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

ps - скоро выложу описание небольшой модификации самой страницы профиля(ну и она мне тож немного не нравится, а тут человек попросил её модифицировать, получилось нормально)
GoodMade.ru 1 октября 2011 в 16:34 0
исправления я тоже учел. и добавил центрирование блоков.
Спасибо.
Крот 1 октября 2011 в 09:22 0
а целиком файлы чтобы скачать? я сам бы посмотрел чем отличаются)
Sergey Platonov 1 октября 2011 в 10:17 0
теоретически можно дать всё, смотря как попросить - вот только смысл давать полностью, если у меня во первых могут  там быть свои доработки в другие направления (я ж не только это правлю) ну и во вторых у меня стили свои - у вас свои, ну и в третьих - я тут подробнейшим образом описал что и как ... вам только открыть, найти, изменить, сохранить. а вот если вы просто хотите заменить свои файлы оригинальные на мои - тогда б так и написали...
Крот 1 октября 2011 в 12:53 0
нужно только для сравнения с оригиналом разработчиков... т.е. для скорости - скопировал в чистую настройку, посмотрел... понравилось, использовал.
Ну раз есть еще другие доработки то не могу настаивать на получении, сам иногда не все показываю)))
БИБАБО 30 ноября 2011 в 17:48 0
Пользователь сам себя не видит в рейтинге, в позитивных... наверно это не правильно.
Sergey Platonov 30 ноября 2011 в 20:15 0
да пользователь не видит себя в списке пользователей, это сделано, чтоб он не мог сделать попытку сам себя добавить в друзья или написать себе письмо