Прозвучал вопрос на форуме:
| P.S. Ещё б если можно было рейтинг им добавлять как в тех фотографиях, которые в фотоальбомах, то вообще б замечательно было бы |
РИСКНЕМ?
Лично мне не понравилось что во время загрузки в базу не пишет точное время в часах\мин.
При выводе даты сегодняшних или вчерашних фото функцией dateformat(), пишет типа "Вчера в :" "Сегодня в:"
В фотоальбомах (не личные) - все в норме.
Для того чтоб исправить это необходимо поменять тип столбца
Код PHP:ALTER TABLE cms_user_photos CHANGE pubdate pubdate datetime
Предупреждаю сразу - если фото уже грузили, то его время подпишется 00.00 и вывод будет "Вчера в : 00.00"
Но если загрузить после данной операции, будет "Сегодня в: 23.54"
Теперь откроем
components\users\frontend.php
Где-то между скобками
Код PHP://///////////////////////////// VIEW PHOTO ////////////
if ($do=='viewphoto'){
..........
........
......
}
///////////////////////////////////////////////////////
Будут такие строки:
Код PHP:if ($myprofile || $inCore->userIsAdmin($user_id)) {
echo '<div style="margin-top:5px">';
echo '<a style="height:16px; line-height:16px; margin-right:5px; padding-left:20px; background:url(/components/users/images/edit.gif) no-repeat;" href="/users/'.$usr['id'].'/editphoto'.$photoid.'.html">'.$_LANG['EDIT'].'</a> ';
echo '<a style="height:16px; line-height:16px; padding-left:20px; background:url(/components/users/images/delete.gif) no-repeat;" href="/users/'.$usr['id'].'/delphoto'.$photoid.'.html">'.$_LANG['DELETE'].'</a> ';
echo '</div>';
}
ИХ УДАЛЯЕМ.
Чуть ниже ПЕРЕД строчкой:
Код PHP: $inCore->loadLib('tags');
Вставим вот этот блок:
Код PHP: //Вывод голосования за фото
$inCore->loadLib('karma');
echo '<div class="photo_bar">';
echo '<table width="" cellspacing="0" cellpadding="4" align="center"><tr>';
echo '<td width=""><strong>Добавлена:</strong> '.$inCore->dateformat($photo['pubdate']).'</td>';
$karma = cmsKarma('userphoto', $photo['id']);
echo '<td width=""><strong>'.$_LANG['HITS'].': </strong> '.$photo['hits'].'</td>';
echo '<td width=""><strong>'.$_LANG['RATING'].': </strong><span id="karmapoints">'.cmsKarmaFormatSmall($karma['points']).'</span></td>';
echo '<td width="">'.cmsKarmaButtons('userphoto', $photo['id']).'</td>';
if ($myprofile || $inCore->userIsAdmin($user_id)) {
echo '<td width="">';
echo '<a style="height:16px; line-height:16px; margin-right:5px; padding-left:20px; background:url(/components/users/images/edit.gif) no-repeat;" href="/users/'.$usr['id'].'/editphoto'.$photoid.'.html">'.$_LANG['EDIT'].'</a> ';
echo '<a style="height:16px; line-height:16px; padding-left:20px; background:url(/components/users/images/delete.gif) no-repeat;" href="/users/'.$usr['id'].'/delphoto'.$photoid.'.html">'.$_LANG['DELETE'].'</a> ';
echo '</td>';
}
echo '</tr></table>';
echo '</div>';
//конец вывода голосования за фото
Все. Теперь в личных фотоальбомах будет возможность проголосовать за фото как это
реализованно в общем фотоальбоме.
5 Сентября 2010
Маленькое дополнение:
Для того, чтоб при голосе + - за фото пересчитывался рейтинг пользователя, необходимо
сделать еще один запрос.
Код PHP:INSERT INTO cms_rating_targets(id, target, component,is_user_affect, user_weight, target_table, target_title)
values('', 'userphoto', 'users', '1', '5', 'cms_user_photos', 'Личное фото')
5 сентября. Вечер.
Подумал что как-то неправильно что рейтинг можно просто посмотреть. Толку от него???
Короче. Набросал на скорую руку модуль "Популярные фотографии пользователей".
Кому надо - забирайте.
Скачать Архив
Внутри архива инструкция по установке.
Еще одно маленькое дополнение.
Справедливо замечено, что в ленте тоже должны отображаться фото друзей.
Для этого в
core\classes\user.class.php найдем функцию
(public static function getUserFriendsPhotos)
и сразу за ней добавим такую:
Код PHP: /**
* Возвращает последние личные фотографии друзей
* @param int $user_id
* @param int $limit
* @return array
*/
public static function getUserFriendsUserPhotos($user_id, $limit=10){
$inDB = cmsDatabase::getInstance();
$inCore = cmsCore::getInstance();
$friends = self::getFriends($user_id);
if (!$friends) { return false; }
$friends_sql = '';
foreach($friends as $id=>$friend){
$friends_sql .= 'u.id = '.$friend['id'];
if ($id < sizeof($friends)-1){ $friends_sql .= ' OR '; }
}
$sql = "SELECT DISTINCT p.id, p.title, p.user_id, u.id as user_id, u.nickname as nickname, u.login as login,
IF(DATE_FORMAT(p.pubdate, '%d-%m-%Y')=DATE_FORMAT(NOW(), '%d-%m-%Y'), DATE_FORMAT(p.pubdate, '<strong>Cегодня</strong> в %H:%i'),
IF(DATEDIFF(NOW(), p.pubdate)=1, DATE_FORMAT(p.pubdate, 'Вчера в %H:%i'),DATE_FORMAT(p.pubdate, '%d, %M') )) as pubdate
FROM cms_user_photos p, cms_users u
WHERE p.user_id = u.id AND ({$friends_sql})
ORDER BY p.pubdate DESC
";
if ($limit) { $sql .= 'LIMIT '.$limit; }
$result = $inDB->query($sql);
$photos = array();
if (!$inDB->num_rows($result)){ return false; }
while ($photo = $inDB->fetch_assoc($result)){
$photo['pubdate'] = $inCore->getRusDate($photo['pubdate']);
$photos[] = $photo;
}
return $photos;
}
// ============================================================================ //
// ============================================================================ //
Теперь перейдем в
components\users\frontend.php в рзделе
Код PHP:
/////////////////////////////// VIEW PROFILE //////
if ($do=='profile'){
...........
.........
.......
}
После строчки
Код PHP: $usr['friends_photos'] = cmsUser::getUserFriendsPhotos($usr['id']);
Добавим такую:
Код PHP: $usr['friends_user_photos'] = cmsUser::getUserFriendsUserPhotos($usr['id']);
И наконец, в шаблоне в
com_users_profile.tpl (Закладка 2)
Вместо строки
Код PHP: {if $usr.friends_photos}
Напишем
Код PHP:{if $usr.friends_photos || $usr.friends_user_photos}
И после строк
Код PHP:
{foreach key=tid item=photo from=$usr.friends_photos}
<tr>
<td class="date">
{$photo.pubdate}
</td>
<td>
<a href="{profile_url login=$photo.login}" class="nickname">{$photo.nickname}</a> →
<a href="/photos/photo{$photo.id}.html">{$photo.title}</a>
</td>
</tr>
{/foreach}
Добавим вывод личных фото
Код PHP:
{foreach key=tid item=photo from=$usr.friends_user_photos}
<tr>
<td class="date">
{$photo.pubdate}
</td>
<td>
<a href="{profile_url login=$photo.login}" class="nickname">{$photo.nickname}</a> →
<a href="/users/{$photo.user_id}/photo{$photo.id}.html">{$photo.title}</a>
</td>
</tr>
{/foreach}
Вроде ничего не забыл. Все.