Powered by CodeIgniter

Уроки

(28)
14
16 голосов
Учиться, учиться и еще раз учиться — развитие личности идет таким путем.
screenshot-2009-10-04-v-16.08.23.pngДрузья, как и обещал, продолжаю цикл уроков статьей про создание виджетов. Быть может кто-нибудь еще не до конца понимает смысл этого слова, поэтому давайте обозначим понятие для всех. Виджет — это функциональный блок сайта, который несет минимальную смысловую нагрузку. Виджеты живут в боковой панели или, как ее принято назвать, в сайдбаре (от англ. «sidebar» — боковая панель). Система управления сайтами cogear предоставляет необходимый набор виджетов в базовой комплектации: «Сообщества», «Кто сейчас на сайте», «Комментарии», «Облако тегов», «Поиск». Тем не менее вы вольны создавать собственные виджеты для наращивания функционала вашего сайта.
Для начала определим, из каких компонентов состоит виджет:
  • Код виджета, представленный функцией следующего вида (условимся называть виджет top_users):
    /** * Top users widget * * @param object $CI * @param object $config * @return string */ function top_users_widget($CI,$config){ .... if($config->some_param){ $data = $CI->db->get('some_table'); } ... return "Обратно отдается строка, которая по сути и является виджетом"; }
  • Файл конфигурации виджета. Опционально.
    some_param = TRUE
  • Языковые переменные виджета. Входят в языковой файл шестеренки.

Файл с кодом виджета

Создаем папку "/gears/points/widgets/" и в ней — файл "/gears/points/widgets/top_users.php". Обратите внимание, что файл должен иметь точно такое же имя, как и сам виджет.
Функционал виджета прост — берем данные об n (определяется параметром в файле конфигурации) пользователях и выводим их в табличке. Попутно кешируем данные на определенное время, например, на 1 час.
<?php /** * Users rating widget * * @author Dmitriy Belyaev <admin@cogear.ru> * @copyright Copyright © 2009, Dmitriy Belyeav * @license http://cogear.ru/license.html * @link http://cogear.ru * @package Points * @version $Id$ */ /** * Top users widget * * @param object $CI * @param object $config * @return string */ function top_users_widget($CI,$config){ $top_users = retrieve('sidebar/widgets/top_users'); if($top_users === FALSE){ $users = $CI->db->select('users.name,users.url_name,users.points,users.avatar')->limit($config->limit)->order_by('points','desc')->get('users')->result(); $output = array(); foreach($users as $user){ $CI->breadcrumb->set('sidebar/widgets/top_users')->data($user); $avatar = make_icons($user->avatar); $CI->breadcrumb->add('<td align="center"><a href="'.l('/user/'.$user->url_name).'"><img src="'.$avatar['24x24'].'" width="24" border="0" alt="'.$user->name.'" class="avatar"></a></td>'); $CI->breadcrumb->add('<td align="center"><a href="'.l('/user/'.$user->url_name).'">'.$user->name.'</a></td>'); $class = $user->points >= 0 ? ($user->points > 0 ? 'good' : 'zero') : 'bad'; $CI->breadcrumb->add('<td align="center"><span class="'.$class.'">'.$user->points.'</td>'); $output[] = '<tr>'.$CI->breadcrumb->compile().'</tr>'; } $top_users = '<table cellpadding="0" cellspacing="5" width="100%" border="0"> <thead><tr><td></td><td align="center">'.t('gears user').'</td><td align="center">'.t('points top_rating').'</td></tr></thead> '.implode('',$output).' </table>'; $top_users .= '<p style="margin:0 5px;" align="right"><small><a href="'.l('/points/').'">'.t('points show_all').'</a></small></p>'; store('sidebar/widgets/top_users',$top_users,3600); } return $top_users; }

Файл конфигурации

Здесь все просто — нам требуется лишь один параметр, количество пользователей, отображаемых в табличке.
Создадим файл "/gears/points/widgets/top_users.info" со следующим содержимым:
limit = 10

Языковые переменные

Добавим пару строчек в файл "/gears/points/lang/ru.lng".
... [points] ... show_all = "все пользователи" ... [widgets] top_users = "Рейтинг пользователей"

Заключение

Собственно все. Не забудьте сделать виджет активным в панели управления.

firefox.png

screenshot-2009-10-04-v-16.36.32.png

Виджет включен в дистрибутив.
16:44 ← 04 октября 2009 Отправить в Твиттер adminadmin  RSS comments 6

Комментарии (6) ↓

inetlover inetlover time 18:29 ← 04 октября 2009 #
Спасибо за урок! Мне он очень пригодиться, ведь я в изучении движка дальше виджетов пока не продвинулся :)
Автор
admin admin time 18:35 ← 04 октября 2009 #
Пожалуйста. В принципе, можно было обойтись и без «хлебных крошек» (breadcrumb) в коде вывода, но таким образом мы даем возможность другим шестеренка хукать на виджет.
wertex wertex time 16:14 ← 30 августа 2010 #
может быть странно, но не могу перетащить в активные виджеты…
inetlover inetlover time 18:31 ← 30 августа 2010 #
А другие элементы на Javascripte на вашем сайте работают?
Sharc Sharc time 19:44 ← 19 марта 2011 #
странно но у меня такого виджета нет, папка и в папке все есть, но в «неактивных виджетах» ничего такого нет
и в активных тоже
Автор
admin admin time 18:27 ← 21 марта 2011 #
Надо включить для начала шестеренку Points.