Сообщество
Нестандартные модули, блоки, шаблоны и собственные сборки BigStreet.
Кто заходил на сайт - оформляем красиво, плюс делаем красивый title для картинок в постах
Долгое время собирался копнуть левый сайдбар движка на предмет «как оно вообще работает». Хорошим мотивом в этом благом начинании послужила мне моя навязчивая идея улучшить дефолтный вариант вывода аватарок недавних посетителей и информации к ним. Подумал, что как-то не эргономично… пропадает много места. Мне показалось будет более аккуратно, если выводить список аватаров не в одну колонку, как сейчас, а в три (четыре, пять… как угодно вобщем).  При этом всю информацию (ник, имя, статус, время) можно выводить средствами jQuery в небольшом прозрачном окне (по событию — наведению курсора мыши). Наверное на этом можно ставить кат и дальше переходить непосредственно к коду.
Посколько со Smarty я почти не был знаком до сегодняшнего дня, пришлось искать информацию (очень помог этот сайт). Получилось вроде интересно, потому спешу поделиться результатами своего эксперимента с вами.
План будет такой: Нужно добавить скрипт, который будет обрабатывать тайтл картинки (аватары) и выводить информацию из него в виде всплывающего окошка. Можно для этой цели использовать такую штуку, которая называется tooltip, но я нашел в сети более простое решение для jQuery. Далее нужно осуществить вывод аватар в три колонки и добавить в тайтл каждой информацию (ник, имя, статус, время). Все просто. Итак.
1. Первое что мы сделаем, это добавим в файл sample.header.tpl следующий скрипт:
<script language="JavaScript" type="text/javascript">
{literal}
function simple_tooltip(target_items, name){
$(target_items).each(function(i){
$("body").append("<div class='"+name+"' id='"+name+i+"'><div>"+$(this).attr('title')+"</div></div>");
var my_tooltip = $("#"+name+i);
$(this).removeAttr("title").mouseover(function(){
my_tooltip.css({opacity:0.8, display:"none"}).fadeIn(100);
}).mousemove(function(kmouse){
my_tooltip.css({left:kmouse.pageX+15, top:kmouse.pageY+15});
}).mouseout(function(){
my_tooltip.fadeOut(100);
});
});
}
$(document).ready(function(){
simple_tooltip(".title_img","tooltip");
});
{/literal}
</script>
Вот этот код
simple_tooltip("img.title_img","tooltip");
в частности значение img.title_img — отвечает за то, какие именно картинки будут иметь на вашем сайте красивый всплывающий тайтл. Таким образом, добавив:
к нужному изображению, получим такое же окошко, как у аватаров… но это лирика, возвращаюсь к сабжу.
2. Теперь нужно добавить в файл стиля вашей темы base.css следующий код:
.tooltip {
position:absolute;
z-index:999;
left:-9999px;
background-color:#dedede;
padding:5px;
border:1px solid #fff;
width:170px;
display:none
}
.tooltip div{
margin:0;
padding:0;
color:#333;
background-color:#fff;
padding:5px 7px 5px 10px;
}
3. Создаем файл (если у вас его еще нет) в папке samples/ с именем user_online.php:
<?php
require_once('system/mappers/users.mysql.mapper.php');
$oUsersMapper = new Users_MySQLMapper(System_Database::getInstance('site'));
$oSettings->setJs($oSettings->getPathWeb().'/js/users.js');
$aCollectionOnLineRes = $oUsersMapper->getCollectionOnLine(18);
$oSmarty->assign('aCollectionOnLine', $aCollectionOnLineRes['aCollection']);
?>
Не трудно догадаться, что число 18 отвечает за кол-во выводимых аватаров.
4. Создаем (если такового нет) файл sample.user_online.tpl в папке themes/default/templates/, или меняем код файла на следующий:
<div style="padding: 10px 0 0 10px">
<table cellspacing="3px" cellpadding="0" border=0 >
<tr>
{assign var=col value=4} {*Количество колонок в таблице*}
{section name=oUser loop=$aCollectionOnLine}
{if $col == "4"}
</tr><tr>{assign var="col" value="0"}
{/if}
{if $aCollectionOnLine[oUser]->getAvatarExt()}
<td align="left" style="padding: 0 0 7px 5px" width="55px">
<a class="gray" href="{$oRouter->getPathWeb()}/profile/{$aCollectionOnLine[oUser]->getLogin()}/">
<img src="{$oRouter->getPathWeb()}/uploads/users/{$aCollectionOnLine[oUser]->getId()}/avatar_medium.{$aCollectionOnLine[oUser]->getAvatarExt()}" width="50px" height="50px" border="0" class="title_img" title="<b>{$aCollectionOnLine[oUser]->getLogin()}{if $aCollectionOnLine[oUser]->getName()} ({$aCollectionOnLine[oUser]->getName()}){/if}</b> <small>{if $aCollectionOnLine[oUser]->getUserStatus()}<br/><b>Статус</b>: {$aCollectionOnLine[oUser]->getUserStatus()} {/if}</small> <br/><b>Последний визит:</b><br/><big>{$aCollectionOnLine[oUser]->getLastTimeAsText()}</big>"></a>
</td>
{/if}
{assign var="col" value="`$col+1`"}
{/section}
{assign var="remainder" value="`4-$col`"}
{section name=emptyoUser loop=$remainder}
<td> </td>
{/section}
</tr>
</table>
<div align="right" style="padding-right:10px;"><a href="{$oRouter->getPathWeb()}/users/" border="0">Все пользователи</a></div>
</div>
Число 4 в данной конструкции отвечает за кол-во колонок (меняем по желанию).
5. В файле index.php, в строке:
$oSmarty->setSamples('left', array('small_cart', 'hot_topics_comments', 'tags_cloud', 'new_topics'));
добавляем (если нет)
Это все. Теперь мы имеем аккуратную табличку аватарок в четыре колонки, плюс, как бонус, красивый тайтл для всех изображений сайта, которые помечены классом title_img.
Еще момент. Если присмотреться к коду файла samples/user_online.php, станет понятно, что он представляет собой небольшой кусочек кода из modules/users/index.action.php, который, в свою очередь, отвечает за вывод списка пользователей на странице сайт.ру/users/… следовательно, если взять другой небольшой кусочек этого же файла (отвечающий за сортировку по рейтингу), то можно сделать блок, который будет выводить список самых «прокачаных» пользователей сайта, аналогично блоку users_online.
Что, собственно, я для себя и сделал — топ лучших пользователей в левый сайдбар. Это оказалось довольно просто. Наверняка многие подобную штуку уже сами делали для своих проектов... Но, тем не менее, на сайте bigstreet информации я об этом не нашел, потому если кому-то вдруг будет интересно — пишите в комментариях, дополню пост блоком топ лучших пользователей.
UPDATE Обнаружилась неприятная бага в IE Капризный IE помог найти ошибку в содержании title были незакрытые теги
Код исправил.
| tommyred |
27 июня 2009 21:38 |
комментариев: 18 |
 |
6,19 |
 |
|
просмотров: 1463 |
Комментарии:
Только зарегистрированные пользователи могут оставлять комментарии.
|
|
+
В закладки, спасибо пригодится.А так можно устранить некрасивость.
Написать комментарий