Закрыть
Загрузка данных
Логин:   Пароль:      
Регистрация   Забыли пароль?

Важные объявления:

Призовой фонд bigstreet




Что такое призовой фонд скрипта социальных сетей bigstreet - это фонд который позволит спонсировать лучшие разработки на основе bigstreeta они могут быть как модули, дополнения, так и дизайн, шаблоны, моды и хаки. Чем больше соберем призового фонда - тем быстрее будет продвигатся разработка, так как желающие что-то сделать полезное всегда найдутся.

Фонд помощи разработчикам bigstreet

+ 500 рублей

15 горячих:


Сообщество

Opensource

Нестандартные модули, блоки, шаблоны и собственные сборки BigStreet.

Публикации   Пользователи   RSS
Закрыть
Загрузить:
Указать:
Выравнивание:    Копирайт:
Альт
Цвет шрифта Закрыть
Белый Розовый Серебряный Оливковый Красно-коричневый Лимонный Зеленый Темно-синий Желтый Красный Серый Фиолетовый Водный Зеленовато-голубой Голубой
Выделить маркером Закрыть
Розовый Серебряный Оливковый Красно-коричневый Лимонный Зеленый Темно-синий Желтый Красный Серый Фиолетовый Водный Зеленовато-голубой Голубой Черный
Смайлики ;) Закрыть
Улыбка Нахмуриться Подмигивание Язык Смех Смущение Нерешительность Сюрприз Поцелуй Вопль Класс Денежки Ошибся Невинность Плач Рот на замке

Кто заходил на сайт - оформляем красиво, плюс делаем красивый title для картинок в постах

Долгое время собирался копнуть левый сайдбар движка на предмет «как оно вообще работает».
Хорошим мотивом в этом благом начинании послужила мне моя навязчивая идея улучшить дефолтный вариант вывода аватарок недавних посетителей и информации к ним.
Подумал, что как-то не эргономично… пропадает много места. Мне показалось будет более аккуратно, если выводить список аватаров не в одну колонку, как сейчас, а в три (четыре, пять… как угодно вобщем).



При этом всю информацию (ник, имя, статус, время) можно выводить средствами jQuery в небольшом прозрачном окне (по событию — наведению курсора мыши). Наверное на этом можно ставить кат и дальше переходить непосредственно к коду.


Посколько со Smarty я почти не был знаком до сегодняшнего дня, пришлось искать информацию (очень помог этот сайт).
Получилось вроде интересно, потому спешу поделиться результатами своего эксперимента с вами.

План будет такой:
Нужно добавить скрипт, который будет обрабатывать тайтл картинки (аватары) и выводить информацию из него в виде всплывающего окошка. Можно для этой цели использовать такую штуку, которая называется tooltip, но я нашел в сети более простое решение для jQuery. Далее нужно осуществить вывод аватар в три колонки и добавить в тайтл каждой информацию (ник, имя, статус, время). Все просто. Итак.

1. Первое что мы сделаем, это добавим в файл sample.header.tpl следующий скрипт:

  1.  
  2. <script language="JavaScript" type="text/javascript">
  3. {literal}
  4. function simple_tooltip(target_items, name){
  5.  $(target_items).each(function(i){
  6.  $("body").append("<div class='"+name+"' id='"+name+i+"'><div>"+$(this).attr('title')+"</div></div>");
  7.  var my_tooltip = $("#"+name+i);
  8.  
  9.  $(this).removeAttr("title").mouseover(function(){
  10.  my_tooltip.css({opacity:0.8, display:"none"}).fadeIn(100);
  11.  }).mousemove(function(kmouse){
  12.  my_tooltip.css({left:kmouse.pageX+15, top:kmouse.pageY+15});
  13.  }).mouseout(function(){
  14.  my_tooltip.fadeOut(100);
  15.  });
  16.  });
  17. }
  18. $(document).ready(function(){
  19.  simple_tooltip(".title_img","tooltip");
  20. });
  21. {/literal}     
  22. </script>
  23.  


Вот этот код

  1. simple_tooltip("img.title_img","tooltip");


в частности значение img.title_img — отвечает за то, какие именно картинки будут иметь на вашем сайте красивый всплывающий тайтл. Таким образом, добавив:

  1. class="title_img"


к нужному изображению, получим такое же окошко, как у аватаров… но это лирика, возвращаюсь к сабжу.


2. Теперь нужно добавить в файл стиля вашей темы base.css следующий код:

  1.  
  2. .tooltip {
  3.  position:absolute;
  4.  z-index:999;
  5.  left:-9999px;
  6.  background-color:#dedede;
  7.  padding:5px;
  8.  border:1px solid #fff;
  9.  width:170px;
  10.  display:none
  11.  }
  12.  
  13. .tooltip div{
  14.  margin:0;
  15.  padding:0;
  16.  color:#333;
  17.  background-color:#fff;
  18.  padding:5px 7px 5px 10px;
  19. }
  20.  


3. Создаем файл (если у вас его еще нет) в папке samples/ с именем user_online.php:


  1.  
  2. <?php
  3. require_once('system/mappers/users.mysql.mapper.php');
  4. $oUsersMapper = new Users_MySQLMapper(System_Database::getInstance('site'));
  5. $oSettings->setJs($oSettings->getPathWeb().'/js/users.js');
  6.  
  7. $aCollectionOnLineRes = $oUsersMapper->getCollectionOnLine(18);
  8. $oSmarty->assign('aCollectionOnLine', $aCollectionOnLineRes['aCollection']);
  9.  
  10.  
  11. ?>
  12.  


Не трудно догадаться, что число 18 отвечает за кол-во выводимых аватаров.

4. Создаем (если такового нет) файл sample.user_online.tpl в папке themes/default/templates/, или меняем код файла на следующий:

  1.  
  2. <div style="padding: 10px 0 0 10px">
  3. <table cellspacing="3px" cellpadding="0" border=0 >
  4. <tr>
  5.                                
  6.         {assign var=col value=4} {*Количество колонок в таблице*}             
  7.  
  8.         {section name=oUser loop=$aCollectionOnLine}
  9.                        
  10.         {if $col == "4"}
  11.             </tr><tr>{assign var="col" value="0"}
  12.         {/if}  
  13.                
  14.         {if $aCollectionOnLine[oUser]->getAvatarExt()} 
  15.         <td align="left" style="padding: 0 0 7px 5px" width="55px">
  16.         <a class="gray" href="{$oRouter->getPathWeb()}/profile/{$aCollectionOnLine[oUser]->getLogin()}/">
  17.         <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>
  18.         </td>
  19.         {/if}
  20.  
  21.         {assign var="col" value="`$col+1`"}
  22.     {/section}
  23.     {assign var="remainder" value="`4-$col`"}
  24.     {section name=emptyoUser loop=$remainder}
  25.     <td> </td>                        
  26.                                        
  27.         {/section}
  28.                                        
  29. </tr>
  30. </table>
  31. <div align="right" style="padding-right:10px;"><a href="{$oRouter->getPathWeb()}/users/" border="0">Все пользователи</a></div>
  32. </div>
  33.  


Число 4 в данной конструкции отвечает за кол-во колонок (меняем по желанию).

5. В файле index.php, в строке:

  1. $oSmarty->setSamples('left', array('small_cart', 'hot_topics_comments', 'tags_cloud', 'new_topics'));


добавляем (если нет)

  1. 'user_online'


Это все. Теперь мы имеем аккуратную табличку аватарок в четыре колонки, плюс, как бонус, красивый тайтл для всех изображений сайта, которые помечены классом title_img.


Еще момент. Если присмотреться к коду файла samples/user_online.php, станет понятно, что он представляет собой небольшой кусочек кода из modules/users/index.action.php, который, в свою очередь, отвечает за вывод списка пользователей на странице сайт.ру/users/… следовательно, если взять другой небольшой кусочек этого же файла (отвечающий за сортировку по рейтингу), то можно сделать блок, который будет выводить список самых «прокачаных» пользователей сайта, аналогично блоку users_online.

Что, собственно, я для себя и сделал — топ лучших пользователей в левый сайдбар. Это оказалось довольно просто. Наверняка многие подобную штуку уже сами делали для своих проектов...
Но, тем не менее, на сайте bigstreet информации я об этом не нашел, потому если кому-то вдруг будет интересно — пишите в комментариях, дополню пост блоком топ лучших пользователей.

UPDATE
Обнаружилась неприятная бага в IE
Капризный IE помог найти ошибку в содержании title были незакрытые теги
  1.  
  2. <big>, <small>
  3.  

Код исправил.
Метки: css, jquery, дизайн
tommyred 27 июня 2009 21:38 комментариев: 18
:) 6,19 :(
просмотров: 1463

Комментарии:
прикольно)спс
bond1211 bond1211   27 июня 2009 23:20
:) 0 :( #
и тогда уж и топ можно сразу расписать!
bond1211 bond1211   27 июня 2009 23:36
:) 0 :( #
Как только исправлю багу, так и выложу
tommyred tommyred   28 июня 2009 00:06
:) 0 :( #

+

В закладки, спасибо пригодится.
inetlover inetlover   28 июня 2009 11:51
:) 0 :( #
ещё интересность… после вставки кода в sample.header.tpl на главной странице в самом низу остаётся весьма заметный промежуток места который исчезает если провести по всем никак в левом блоге… на остальных страницах всё норм
bond1211 bond1211   28 июня 2009 22:15
:) 0 :( #
Ага, я это сразу заметил, но грешил сперва на стили своего шаблона, если честно (думал где-то там накосячил), скорее всего дело в css оформлении, еще не разбирался. Разберусь — напишу.
tommyred tommyred   28 июня 2009 22:43
:) 0 :( #
буду ждать
bond1211 bond1211   28 июня 2009 22:53
:) 0 :( #
Чтобы не поиметь в подвале сайта пустующую область приличных размеров, ява-скрипт нужно поставить не до закрывающего тега head, а сразу после него. И будет все хорошо )))
tommyred tommyred   29 июня 2009 00:34
:) 0 :( #
а вот и наврал… =(( это я видно от безнадеги такую глупость сморозил =)), но что характерно, локальная версия сайта у меня отображается нормально… шаблон один, скрипт тот же… нифига не понимаю o_O
tommyred tommyred   29 июня 2009 00:47
:) 0 :( #
Вот решение. В класс .tooltip нужно добавить display: none
tommyred tommyred   29 июня 2009 01:02
:) 0 :( #
Тлли с просоня толи ещё как но .tooltip найти не могу… тока в css но не работает)
bond1211 bond1211   29 июня 2009 06:39
:) 0 :( #
Все верно, в класс .tooltip, в base.css. Если не работает, обновить кеш в папке templates_compiled. Если результат тот же — пришли в личку свой base.css, я посмотрю.
tommyred tommyred   29 июня 2009 14:31
:) 0 :( #
посмотрел твой css =) просто ты после none не поставил ; =) исправь и все будет ОК
tommyred tommyred   29 июня 2009 20:48
:) 0 :( #
у меня в примере после none не поставлена точка с запятой просто потому, что описание св-ва display идет самым последним и в этом случае оно сработает как нужно.
tommyred tommyred   29 июня 2009 20:59
:) 0 :( #
Спасибо
trantor trantor   29 июня 2009 19:09
:) 0 :( #
о точно)ступил… спасибо)
bond1211 bond1211   29 июня 2009 21:24
:) 0 :( #
молодец, tommyred, + тебе и мое признание.
galo4kin galo4kin   1 июля 2009 10:54
:) 0 :( #
При отключенном Javascripte пользователь видит не красивый title


А так можно устранить некрасивость.

  1.  
  2. <noscript>{literal}<style type="text/css">.users_online_title {display: none; position: absolute;}</style>{/literal}Здесь выводится альтернативная аватара с альтернативным titlt которая показывается тем у кого Javascript отключен</noscript>
  3.        
  4. <div class="users_online_title">А здесь идет та аватара с titlt которая будет показываться тем у кого Javascript включен</div>
  5.  

inetlover inetlover   13 сентября 2009 23:34
:) 0 :( #
Написать комментарий
Только зарегистрированные пользователи могут оставлять комментарии.





Подписаться на рассылку
"Бесплатный движок bigstreet.ru"


 
© 2009. | О сайте | Инструкции | Обратная связь
© Powered by BigStreet RC1-maps SVN Сервис коротких адресов День святого Валентина
www.webmoney.ru Участник проекта CMS Magazine


Работа с БД:
 Время - 3.0117
 Запросов - 12
Работа с кэшем:
 Время - 2.4927
 Записей - 2
 Прочтений - 5
Общее время:
 6.0452