1
0
Fork 0
mirror of https://github.com/Oreolek/ifhub.club.git synced 2024-06-17 07:10:48 +03:00

Шаблон Synio

Профиль пользователя, Стена
This commit is contained in:
Denis Shakhov 2016-09-01 10:14:41 +07:00
parent 1fbaa0ac46
commit 11618a9ff0
12 changed files with 580 additions and 208 deletions

View file

@ -26,6 +26,6 @@
}
/* Список */
.user-info-group-items .info-list-item-label { width: 150px; }
.user-info-group-items .info-list-item { margin-bottom: 10px; }
.user-info-group-items .info-list-item-content { font-weight: normal; }
.user-info-group-items .ls-info-list-item-label { width: 150px; }
.user-info-group-items .ls-info-list-item { margin-bottom: 10px; }
.user-info-group-items .ls-info-list-item-content { font-weight: normal; }

View file

@ -3,19 +3,29 @@
*}
{$component = 'user-info-group'}
{component_define_params params=[ 'html', 'items', 'name', 'title', 'mods', 'classes', 'attributes' ]}
{component_define_params params=[ 'url', 'count', 'html', 'items', 'name', 'title', 'mods', 'classes', 'attributes' ]}
{hook run="{$component}-{$name}-before"}
{* Получаем пункты установленные плагинами *}
{hook run="{$component}-{$name}-items" assign='itemsHook' items=$items array=true}
{$items = $itemsHook|default:$items}
{$items = ($itemsHook) ? $itemsHook : $items}
{if $html || $items}
<div class="{$component} {cmods name=$component mods=$mods} {$classes}" {cattr list=$attributes}>
<h3 class="user-info-group-title">
{$title}
</h3>
{if $title}
<h3 class="{$component}-title">
{if $url}
<a href="{$url}">{$title}</a>
{else}
{$title}
{/if}
{if $count}
<span class="user-info-group-count">{$count}</span>
{/if}
</h3>
{/if}
<div class="user-info-group-content">
{if $html}

View file

@ -0,0 +1,14 @@
/**
* Список аватаров
*
* @module ls/avatar/name
*
* @license GNU General Public License, version 2
* @copyright 2013 OOO "ЛС-СОФТ" {@link http://livestreetcms.com}
* @author Denis Shakhov <denis.shakhov@gmail.com>
*/
.ls-avatar-list .ls-avatar {
float: left;
margin: 0 10px 10px 0;
}

View file

@ -0,0 +1,89 @@
/**
* Аватар
*
* @module ls/avatar
*
* @license GNU General Public License, version 2
* @copyright 2013 OOO "ЛС-СОФТ" {@link http://livestreetcms.com}
* @author Denis Shakhov <denis.shakhov@gmail.com>
*/
.ls-avatar {
display: inline-block;
}
.ls-avatar-image {
display: block;
width: 100px;
height: 100px;
}
.ls-avatar-image-link {
display: block;
text-decoration: none;
}
.ls-avatar-name {
font-size: 11px;
}
.ls-avatar-name-link {
color: #275ec2;
}
.ls-avatar-name-link:hover {
color: #f00;
}
.ls-avatar--size-small .ls-avatar-image {
width: 64px;
height: 64px;
}
.ls-avatar--size-xsmall .ls-avatar-image {
width: 48px;
height: 48px;
}
.ls-avatar--size-xxsmall .ls-avatar-image {
width: 24px;
height: 24px;
}
.ls-avatar--size-text .ls-avatar-image {
width: 18px;
height: 18px;
}
/**
* @modifier has-name
*/
.ls-avatar--has-name {
max-width: 64px;
text-align: center;
}
.ls-avatar--has-name .ls-avatar-image {
margin: 0 auto 2px;
}
.ls-avatar--has-name .ls-avatar-name {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
/**
* @modifier inline
*/
.ls-avatar--has-name.ls-avatar--inline {
max-width: none;
}
.ls-avatar--has-name.ls-avatar--inline .ls-avatar-image,
.ls-avatar--has-name.ls-avatar--inline .ls-avatar-image-link,
.ls-avatar--has-name.ls-avatar--inline .ls-avatar-name {
display: inline-block;
vertical-align: middle;
}
.ls-avatar--has-name.ls-avatar--inline .ls-avatar-image {
margin: 0 2px 0 0;
}

View file

@ -0,0 +1,57 @@
/**
* Список с информацией
*/
.ls-info-list {
margin-bottom: 20px;
list-style: none;
padding: 0;
}
.ls-info-list:last-child {
margin-bottom: 0;
}
.ls-info-list-item {
position: relative;
margin-bottom: 5px;
overflow: hidden;
display: table;
width: 100%;
}
.ls-info-list-item:last-child {
margin-bottom: 0;
}
.ls-info-list-item:after {
content: "";
border-bottom: 1px dotted #d1d8dc;
position: absolute;
left: 0;
right: 0;
top: 1.2em;
z-index: 1;
}
.ls-info-list-item > * {
display: table-cell;
vertical-align: top;
}
.ls-info-list-item-label {
width: 130px;
position: relative;
z-index: 10;
}
.ls-info-list-item-content {
font-weight: normal;
background: #fff;
position: relative;
z-index: 10;
margin-left: 150px;
padding-left: 2px;
}
.ls-info-list-item-content a {
text-decoration: underline;
}
.ls-info-list-item-label-text {
background: #fff;
padding-right: 2px;
}

View file

@ -0,0 +1,46 @@
{**
* Список с информацией
*
* @param array $list (null) Массив в формате [ label, content ]
* @param string $title (null) Заголовок
*}
{* Название компонента *}
{$component = 'ls-info-list'}
{component_define_params params=[ 'url', 'count', 'title', 'list', 'mods', 'classes', 'attributes' ]}
{block 'info_list_options'}{/block}
{if $list}
<div class="{$component} {cmods name=$component mods=$mods} {$classes}" {cattr list=$attributes}>
{* Заголовок *}
{if $title}
<h2 class="{$component}-title">
{if $url}
<a href="{$url}">{$title}</a>
{else}
{$title}
{/if}
{if $count}
<span class="user-info-group-count">{$count}</span>
{/if}
</h2>
{/if}
{* Список *}
<ul class="{$component}-list">
{foreach $list as $item}
<li class="{$component}-item {$item['classes']}" {cattr list=$item['attributes']}>
<div class="{$component}-item-label">
<span class="{$component}-item-label-text">{$item['label']}</span>
</div>
<div class="{$component}-item-content">
{$item['content']}
</div>
</li>
{/foreach}
</ul>
</div>
{/if}

View file

@ -47,7 +47,8 @@ p:last-child {
* Заголовки
*/
h1, h2, h3, h4, h5, h6,
.h1, .h2, .h3, .h4, .h5, .h6 {
.h1, .h2, .h3, .h4, .h5, .h6,
.ls-heading {
margin: 0 0 15px;
font-family: "PT Sans", sans-serif;
font-weight: 300;
@ -69,6 +70,14 @@ h4 small, .h4 small,
h5 small, .h5 small,
h6 small, .h6 small { font-size: 65%; color: #aaa; }
.ls-heading a {
color: #275ec2;
text-decoration: underline;
}
.ls-heading a:hover {
color: #f00;
}
/* Заголовок страницы */
.page-header {
color: #333;

View file

@ -6,7 +6,6 @@
* @author Denis Shakhov <denis.shakhov@gmail.com>
*/
/* Заголовок */
.profile-page-header {
color: #333;
@ -16,19 +15,8 @@
margin-bottom: 20px;
}
/* Блок с информацией */
.user-info-group {
margin-bottom: 50px;
}
.user-info-group:last-child {
margin-bottom: 0;
}
.user-info-group-title {
font-size: 18px;
}
/* О себе */
.user-info-group.user-info-about {
.user-info-about {
padding: 17px 20px 20px 20px;
background: #fcfce9;
border-radius: 5px;
@ -36,15 +24,52 @@
color: #000;
position: relative;
}
.user-info-about .user-info-group-title {
.user-info-about-title {
font-size: 19px;
margin-bottom: 10px;
}
.user-info-about-empty-text {
opacity: .3;
opacity: .4;
}
/* Список */
.user-info-group-items .info-list-item-label { width: 150px; }
.user-info-group-items .info-list-item { margin-bottom: 10px; }
.user-info-group-items .info-list-item-content { font-weight: normal; }
/* Блок с информацией */
.user-info-group-wrapper {
margin-bottom: 50px;
}
.user-info-group-col {
float: left;
width: 50%;
box-sizing: border-box;
}
.user-info-group-col:first-child {
padding-right: 20px;
}
.user-info-group-col:last-child {
padding-left: 20px;
}
.user-info-group {
margin-bottom: 50px;
}
.user-info-group:last-child {
margin-bottom: 0;
}
.user-info-group-title {
margin-bottom: 15px;
font-size: 22px;
font-weight: normal;
}
.user-info-group-count {
color: #949aa1;
}
.user-info-group-items .ls-info-list-item-label {
width: 150px;
}
.user-info-group-items .ls-info-list-item {
margin-bottom: 10px;
}
.user-info-group-items .ls-info-list-item-content {
font-weight: normal;
}

View file

@ -0,0 +1,40 @@
{**
* Блок с информацией
*}
{$component = 'user-info-group'}
{component_define_params params=[ 'url', 'count', 'html', 'items', 'name', 'title', 'mods', 'classes', 'attributes' ]}
{hook run="{$component}-{$name}-before"}
{* Получаем пункты установленные плагинами *}
{hook run="{$component}-{$name}-items" assign='itemsHook' items=$items array=true}
{$items = ($itemsHook) ? $itemsHook : $items}
{if $html || $items}
<div class="{$component} {cmods name=$component mods=$mods} {$classes}" {cattr list=$attributes}>
{if $title}
<h3 class="{$component}-title ls-heading">
{if $url}
<a href="{$url}">{$title}</a>
{else}
{$title}
{/if}
{if $count}
<span class="user-info-group-count">{$count}</span>
{/if}
</h3>
{/if}
<div class="user-info-group-content">
{if $html}
{$html}
{else}
{component 'info-list' list=$items classes='user-info-group-items'}
{/if}
</div>
</div>
{/if}
{hook run="{$component}-{$name}-after"}

View file

@ -22,199 +22,205 @@
{**
* О себе
*}
<div class="user-info-about">
<h3 class="user-info-about-title">
{lang 'user.profile.about.title'}
</h3>
{capture 'user_info_about'}
{if $user->getProfileAbout()}
<div class="ls-text">
{$user->getProfileAbout()}
</div>
{else}
<div class="user-info-about-empty-text">Пока ничего не известно...</div>
<div class="user-info-about-empty-text">
{lang 'synio.user_about_empty'}
</div>
{/if}
{/capture}
{component 'user.info-group' classes='user-info-about' title={lang 'user.profile.about.title'} html=$smarty.capture.user_info_about}
</div>
{**
* Личное
*}
{$items = []}
{$userfields = $user->getUserFieldValues(true, array(''))}
<div class="user-info-group-wrapper ls-clearfix">
<div class="user-info-group-col">
{**
* Личное
*}
{$items = []}
{$userfields = $user->getUserFieldValues(true, array(''))}
{* Пол *}
{if $user->getProfileSex() != 'other'}
{$items[] = [
'label' => {lang name='user.profile.personal.gender'},
'content' => "{if $user->getProfileSex() == 'man'}{lang name='user.profile.personal.gender_male'}{else}{lang name='user.profile.personal.gender_female'}{/if}"
]}
{/if}
{* Пол *}
{if $user->getProfileSex() != 'other'}
{$items[] = [
'label' => {lang name='user.profile.personal.gender'},
'content' => "{if $user->getProfileSex() == 'man'}{lang name='user.profile.personal.gender_male'}{else}{lang name='user.profile.personal.gender_female'}{/if}"
]}
{/if}
{* День рождения *}
{if $user->getProfileBirthday()}
{$items[] = [
'label' => {lang name='user.profile.personal.birthday'},
'content' => {date_format date=$user->getProfileBirthday() format="j F Y" notz=true}
]}
{/if}
{* День рождения *}
{if $user->getProfileBirthday()}
{$items[] = [
'label' => {lang name='user.profile.personal.birthday'},
'content' => {date_format date=$user->getProfileBirthday() format="j F Y" notz=true}
]}
{/if}
{* Местоположение *}
{if $geoTarget}
{capture 'info_private_geo'}
<span itemprop="address" itemscope itemtype="http://data-vocabulary.org/Address">
{if $geoTarget->getCountryId()}
<a href="{router page='people'}country/{$geoTarget->getCountryId()}/" itemprop="country-name">{$user->getProfileCountry()|escape}</a>{if $geoTarget->getCityId()},{/if}
{/if}
{* Местоположение *}
{if $geoTarget}
{capture 'info_private_geo'}
<span itemprop="address" itemscope itemtype="http://data-vocabulary.org/Address">
{if $geoTarget->getCountryId()}
<a href="{router page='people'}country/{$geoTarget->getCountryId()}/" itemprop="country-name">{$user->getProfileCountry()|escape}</a>{if $geoTarget->getCityId()},{/if}
{/if}
{if $geoTarget->getCityId()}
<a href="{router page='people'}city/{$geoTarget->getCityId()}/" itemprop="locality">{$user->getProfileCity()|escape}</a>
{/if}
</span>
{/capture}
{if $geoTarget->getCityId()}
<a href="{router page='people'}city/{$geoTarget->getCityId()}/" itemprop="locality">{$user->getProfileCity()|escape}</a>
{/if}
</span>
{/capture}
{$items[] = [
'label' => {lang name='user.profile.personal.place'},
'content' => $smarty.capture.info_private_geo
]}
{/if}
{$items[] = [
'label' => {lang name='user.profile.personal.place'},
'content' => $smarty.capture.info_private_geo
]}
{/if}
{component 'user.info-group' title={lang name='user.profile.personal.title'} items=$items}
{component 'user.info-group' title={lang name='user.profile.personal.title'} items=$items}
{**
* Активность
*}
{$items = []}
{* Кто пригласил пользователя *}
{if $invitedByUser}
{$items[] = [
'label' => {lang name='user.profile.activity.invited_by'},
'content' => "<a href=\"{$invitedByUser->getUserWebPath()}\">{$invitedByUser->getDisplayName()}</a>"
]}
{/if}
{* Приглашенные пользователем *}
{if $usersInvited}
{$users = ''}
{foreach $usersInvited as $userInvited}
{$users = $users|cat:"<a href=\"{$userInvited->getUserWebPath()}\">{$userInvited->getDisplayName()}</a>&nbsp;"}
{/foreach}
{$items[] = [
'label' => {lang name='user.profile.activity.invited'},
'content' => $users
]}
{/if}
{* Блоги созданные пользователем *}
{if $blogsCreated}
{$blogs = ''}
{foreach $blogsCreated as $blog}
{$blogs = $blogs|cat:"<a href=\"{$blog->getUrlFull()}\">{$blog->getTitle()|escape}</a>{if ! $blog@last}, {/if}"}
{/foreach}
{$items[] = [
'label' => {lang name='user.profile.activity.blogs_created'},
'content' => $blogs
]}
{/if}
{* Блоги администрируемые пользователем *}
{if $blogsAdminister}
{$blogs = ''}
{foreach $blogsAdminister as $blogUser}
{$blog = $blogUser->getBlog()}
{$blogs = $blogs|cat:"<a href=\"{$blog->getUrlFull()}\">{$blog->getTitle()|escape}</a>{if ! $blogUser@last}, {/if}"}
{/foreach}
{$items[] = [
'label' => {lang name='user.profile.activity.blogs_admin'},
'content' => $blogs
]}
{/if}
{* Блоги модерируемые пользователем *}
{if $blogsModerate}
{$blogs = ''}
{foreach $blogsModerate as $blogUser}
{$blog = $blogUser->getBlog()}
{$blogs = $blogs|cat:"<a href=\"{$blog->getUrlFull()}\">{$blog->getTitle()|escape}</a>{if ! $blogUser@last}, {/if}"}
{/foreach}
{$items[] = [
'label' => {lang name='user.profile.activity.blogs_mod'},
'content' => $blogs
]}
{/if}
{* Блоги в которые вступил пользователь *}
{if $blogsJoined}
{$blogs = ''}
{foreach $blogsJoined as $blogUser}
{$blog = $blogUser->getBlog()}
{$blogs = $blogs|cat:"<a href=\"{$blog->getUrlFull()}\">{$blog->getTitle()|escape}</a>{if ! $blogUser@last}, {/if}"}
{/foreach}
{$items[] = [
'label' => {lang name='user.profile.activity.blogs_joined'},
'content' => $blogs
]}
{/if}
{* Дата регистрации *}
{$items[] = [
'label' => {lang name='user.date_registration'},
'content' => {date_format date=$user->getDateRegister()}
]}
{* Дата последнего визита *}
{if $session}
{$items[] = [
'label' => {lang name='user.date_last_session'},
'content' => {date_format date=$session->getDateLast()}
]}
{/if}
{component 'user.info-group' name='activity' title={lang name='user.profile.activity.title'} items=$items}
</div>
<div class="user-info-group-col">
{**
* Контакты
*}
{$items = []}
{$userfields = $user->getUserFieldValues(true, array('contact'))}
{foreach $userfields as $field}
{$items[] = [
'label' => $field->getTitle()|escape,
'content' => $field->getValue(true, true)
]}
{/foreach}
{component 'user.info-group' name='contact' title={lang name='user.profile.contact'} items=$items}
{**
* Контакты
*}
{$items = []}
{$userfields = $user->getUserFieldValues(true, array('contact'))}
{**
* Соц. сети
*}
{$items = []}
{$userfields = $user->getUserFieldValues(true, array('social'))}
{foreach $userfields as $field}
{$items[] = [
'label' => $field->getTitle()|escape,
'content' => $field->getValue(true, true)
]}
{/foreach}
{foreach $userfields as $field}
{$items[] = [
'label' => $field->getTitle()|escape,
'content' => $field->getValue(true, true)
]}
{/foreach}
{component 'user.info-group' name='contact' title={lang name='user.profile.contact'} items=$items}
{**
* Соц. сети
*}
{$items = []}
{$userfields = $user->getUserFieldValues(true, array('social'))}
{foreach $userfields as $field}
{$items[] = [
'label' => $field->getTitle()|escape,
'content' => $field->getValue(true, true)
]}
{/foreach}
{component 'user.info-group' name='social-networks' title={lang name='user.profile.social_networks'} items=$items}
{**
* Активность
*}
{$items = []}
{* Кто пригласил пользователя *}
{if $invitedByUser}
{$items[] = [
'label' => {lang name='user.profile.activity.invited_by'},
'content' => "<a href=\"{$invitedByUser->getUserWebPath()}\">{$invitedByUser->getDisplayName()}</a>"
]}
{/if}
{* Приглашенные пользователем *}
{if $usersInvited}
{$users = ''}
{foreach $usersInvited as $userInvited}
{$users = $users|cat:"<a href=\"{$userInvited->getUserWebPath()}\">{$userInvited->getDisplayName()}</a>&nbsp;"}
{/foreach}
{$items[] = [
'label' => {lang name='user.profile.activity.invited'},
'content' => $users
]}
{/if}
{* Блоги созданные пользователем *}
{if $blogsCreated}
{$blogs = ''}
{foreach $blogsCreated as $blog}
{$blogs = $blogs|cat:"<a href=\"{$blog->getUrlFull()}\">{$blog->getTitle()|escape}</a>{if ! $blog@last}, {/if}"}
{/foreach}
{$items[] = [
'label' => {lang name='user.profile.activity.blogs_created'},
'content' => $blogs
]}
{/if}
{* Блоги администрируемые пользователем *}
{if $blogsAdminister}
{$blogs = ''}
{foreach $blogsAdminister as $blogUser}
{$blog = $blogUser->getBlog()}
{$blogs = $blogs|cat:"<a href=\"{$blog->getUrlFull()}\">{$blog->getTitle()|escape}</a>{if ! $blogUser@last}, {/if}"}
{/foreach}
{$items[] = [
'label' => {lang name='user.profile.activity.blogs_admin'},
'content' => $blogs
]}
{/if}
{* Блоги модерируемые пользователем *}
{if $blogsModerate}
{$blogs = ''}
{foreach $blogsModerate as $blogUser}
{$blog = $blogUser->getBlog()}
{$blogs = $blogs|cat:"<a href=\"{$blog->getUrlFull()}\">{$blog->getTitle()|escape}</a>{if ! $blogUser@last}, {/if}"}
{/foreach}
{$items[] = [
'label' => {lang name='user.profile.activity.blogs_mod'},
'content' => $blogs
]}
{/if}
{* Блоги в которые вступил пользователь *}
{if $blogsJoined}
{$blogs = ''}
{foreach $blogsJoined as $blogUser}
{$blog = $blogUser->getBlog()}
{$blogs = $blogs|cat:"<a href=\"{$blog->getUrlFull()}\">{$blog->getTitle()|escape}</a>{if ! $blogUser@last}, {/if}"}
{/foreach}
{$items[] = [
'label' => {lang name='user.profile.activity.blogs_joined'},
'content' => $blogs
]}
{/if}
{* Дата регистрации *}
{$items[] = [
'label' => {lang name='user.date_registration'},
'content' => {date_format date=$user->getDateRegister()}
]}
{* Дата последнего визита *}
{if $session}
{$items[] = [
'label' => {lang name='user.date_last_session'},
'content' => {date_format date=$session->getDateLast()}
]}
{/if}
{component 'user.info-group' name='activity' title={lang name='user.profile.activity.title'} items=$items}
{component 'user.info-group' name='social-networks' title={lang name='user.profile.social_networks'} items=$items}
</div>
</div>
{**
* Друзья
@ -225,10 +231,15 @@
{/capture}
{component 'user.info-group'
title = "<a href=\"{$user->getUserWebPath()}friends/\">{$aLang.user.friends.title}</a> ({$iCountFriendsUser})"
url = "{$user->getUserWebPath()}friends/"
title = $aLang.user.friends.title
count = $iCountFriendsUser
html = $smarty.capture.user_info_friends}
{/if}
{* @hook Конец информации о пользователе *}
{hook run='user_info_end' user=$user}
{**
* Стена
*}
@ -239,7 +250,4 @@
]}
{/capture}
{component 'user.info-group' name='wall' title={lang name='wall.title'} html=$smarty.capture.user_info_wall}
{* @hook Конец информации о пользователе *}
{hook run='user_info_end' user=$user}
{component 'user.info-group' name='wall' title={lang name='wall.title'} html=$smarty.capture.user_info_wall}

View file

@ -0,0 +1,73 @@
/**
* Стена
*
* @license GNU General Public License, version 2
* @copyright 2013 OOO "ЛС-СОФТ" {@link http://livestreetcms.com}
* @author Denis Shakhov <denis.shakhov@gmail.com>
*/
/**
* Форма добавления сообщения на стену
*/
.wall > .wall-form {
margin-bottom: 15px;
}
.wall-form {
margin-bottom: 10px;
padding: 15px;
background: #f8fbfe;
border-radius: 5px;
}
.wall-form .ls-field {
margin-bottom: 0;
}
.wall-form textarea {
height: 30px;
padding-top: 6px;
padding-left: 8px;
min-height: 30px;
max-height: 30px;
resize: none;
}
.wall-form-footer {
display: none;
}
/* Open */
.wall-form.open .ls-field {
margin-bottom: 15px;
}
.wall-form.open textarea {
height: 90px;
max-height: 300px;
resize: vertical;
}
.wall-form.open .wall-form-footer {
display: block;
}
/**
* Сообщения
*/
.wall-comments {
padding-left: 70px;
}
.wall-comments .wall-comment {
margin-bottom: 10px;
}
.wall-comments .wall-comment:first-child {
margin-top: 10px;
}
/**
* Кнопка подгрузки комментариев
*/
.ls-more.wall-more-comments {
margin-top: 0;
margin-bottom: 10px;
font-size: 11px;
padding: 8px;
}

View file

@ -4,7 +4,8 @@ return [
'synio' => [
'guest' => 'Гость',
'site_pages' => 'Разделы',
'drafts' => '%%count%% черновик;%%count%% черновика;%%count%% черновиков'
'drafts' => '%%count%% черновик;%%count%% черновика;%%count%% черновиков',
'user_about_empty' => 'Пока ничего не известно...'
],
'activity' => [
'block_recent' => [