Плагин aceWidgetManager - включаем/выключаем виджеты по расписанию и по условиям
Если вы еще не знаете, что это за плагин такой aceWidgetManager, то для начала читаем:
Часть 0: Бесплатный плагин aceWidgetManager (бывший aceBlockManager)
Часть 1: Инструкция по применению
Часть 2: Наглядные примеры использования
Если же вы это все уже читали, то самое время узнать некоторые нюансы по работе с виджетами.
Иногда нужно виджет выключить на время, а потом опять включить, а потом опять выключить. Для этого есть опция 'display'. Достаточно задать ей значение false (или просто 0) — и виджет не будет отображаться:
Потом задали там же значение true (или 1) — виджет опять включился.
А что, если нужно отключить виджет в точно назначенное время? Например, вы объявили какой-то конкурс и повесили баннер о конкурсе (как это сделать — см. в предыдущей статье). Но конкурс должен завершиться в новогоднюю ночь строго в полночь. И как быть? Одной рукой держать бокал с шампанским, а другой — стучать по клаве? Нет, поручите это плагину, а сами отдыхайте и веселитесь:
Просто? По-моему, проще некуда.
А можно задать и временной период для вывода виджета. Например, вы продали Яндексу рекламное место на сайте строго на 10 дней — с 11 по 20 декабря включительно:
Точно так же можно использовать 'date_from' без 'date_upto', чтобы заранее разместить виджет, который должен отображаться с указанной даты.
ВАЖНО! Дата и время берутся из настроек сервера, поэтому учитывайте, пожалуйста, сдвиг по часовым поясам.
Но это еще не все! Для более продвинутых админов сайта, которые знают, что такое php и с чем его едят, есть дополнительная возможность: можно задавать произвольное php-выражение (в виде строки), которое вычисляется при инициализации виджетов. Если результат вычисления выражения равен true, то виджет выводится, иначе — нет (значение опции по умолчанию — true).
Например, так можно показать виджет только зарегистрированным и залогиненным пользователям:
А вот так можно задать демонстрацию виджета только по понедельникам:
А вот так виджет может показываться пользователю с IP 192.168.0.1:
Ну, я думаю, принцип ясен. И теперь, с таким мощным и гибким инструментом, как aceWidgetManager, возможности манипулирования виджетами ограничиваются только вашей фантазией.
Часть 0: Бесплатный плагин aceWidgetManager (бывший aceBlockManager)
Часть 1: Инструкция по применению
Часть 2: Наглядные примеры использования
Если же вы это все уже читали, то самое время узнать некоторые нюансы по работе с виджетами.
Иногда нужно виджет выключить на время, а потом опять включить, а потом опять выключить. Для этого есть опция 'display'. Достаточно задать ей значение false (или просто 0) — и виджет не будет отображаться:
$config['widgets'][] = array( 'name' => 'blocks/block.something.tpl', // название шаблона виджета 'group' => 'right', // позиционирование 'display' => false, // отключить виджет );
Потом задали там же значение true (или 1) — виджет опять включился.
А что, если нужно отключить виджет в точно назначенное время? Например, вы объявили какой-то конкурс и повесили баннер о конкурсе (как это сделать — см. в предыдущей статье). Но конкурс должен завершиться в новогоднюю ночь строго в полночь. И как быть? Одной рукой держать бокал с шампанским, а другой — стучать по клаве? Нет, поручите это плагину, а сами отдыхайте и веселитесь:
$config['widgets'][] = array( 'name' => 'template', // название пустого виджета 'group' => 'right', // позиционирование 'params' => array( 'plugin' => 'acewidgetmanager', // 'title' => 'Клевый конкурс', 'text' => '<a href="#"><img src="/uploads/banner/pic.png"></a>', ), 'display' => array('date_upto'=>'2012-12-31 23:59:59'), );
Просто? По-моему, проще некуда.
А можно задать и временной период для вывода виджета. Например, вы продали Яндексу рекламное место на сайте строго на 10 дней — с 11 по 20 декабря включительно:
$config['widgets'][] = array( 'name' => 'template', // название пустого виджета 'group' => 'right', // позиционирование 'params' => array( 'plugin' => 'acewidgetmanager', // 'title' => 'Клевый конкурс', 'text' => '<a href="#"><img src="/uploads/banner/pic.png"></a>', ), 'display' => array('date_from'=>'2012-12-10', 'date_upto'=>'2012-12-21'), );
Точно так же можно использовать 'date_from' без 'date_upto', чтобы заранее разместить виджет, который должен отображаться с указанной даты.
ВАЖНО! Дата и время берутся из настроек сервера, поэтому учитывайте, пожалуйста, сдвиг по часовым поясам.
Но это еще не все! Для более продвинутых админов сайта, которые знают, что такое php и с чем его едят, есть дополнительная возможность: можно задавать произвольное php-выражение (в виде строки), которое вычисляется при инициализации виджетов. Если результат вычисления выражения равен true, то виджет выводится, иначе — нет (значение опции по умолчанию — true).
Например, так можно показать виджет только зарегистрированным и залогиненным пользователям:
$config['widgets'][] = array( 'name' => 'blocks/block.something.tpl', // название шаблона виджета 'group' => 'right', // позиционирование 'condition' => '$this->User_GetUserCurrent()', );
А вот так можно задать демонстрацию виджета только по понедельникам:
$config['widgets'][] = array( 'name' => 'blocks/block.something.tpl', // название шаблона виджета 'group' => 'right', // позиционирование 'condition' => 'date("N")==1', );
А вот так виджет может показываться пользователю с IP 192.168.0.1:
$config['blocks'][] = array( 'block' => '...', // название блока 'position' => 'right', // позиционирование блока 'params' => array( ), 'condition' => '$_SERVER["REMOTE_ADDR"]=="192.168.0.1"', );
Ну, я думаю, принцип ясен. И теперь, с таким мощным и гибким инструментом, как aceWidgetManager, возможности манипулирования виджетами ограничиваются только вашей фантазией.
Предлагаем итальянские кухни премиум класса на любой вкус. От модерна до ретро!
26 комментариев
а как сделать показ виджета только незарегистрированным и незалогиненным пользователям?
Вставляешь в качестве условия примерно такое вот выражение:
($oUser=$this->User_GetUserCurrent()) AND ($oUser->GetProfileSex()==«woman») AND (substr($oUser->GetProfileBirthday(), 4)+18 < date(«Y»))
Хотя лучше, конечно, это обернуть в какую-нибудь функцию или метод модуля и уже эту функцию (или модуль) используешь в условии. Если, конечно, понимаешь, о чем я :)
Можно ли реализовать отключение блока по достижению определенного количества кликов? Здесь правда уже базу нужно будет подключить.
Что нужно сделать, чтобы блок «Кто онлайн» выводил пользователю время в соответствии с пользовательской таймзоной, а не серверной?
После строк:
добавляем:
И меняем на
Всё работает, несмотря на очень тупой яваскрипт.
Вообще, крайне не хватает нормальной документации на эту цмску.
В мануале написано:
а в формате с сохранением часового пояса (типа GMT +0200 или UTC)
Если храните в базе, то используйте формат поля timestamp а не datetime.
Для клиента время надо корректировать функцией timezone_offset_get()