0.00
Рейтинг
0.00
Сила

Дата рождения пользователя и часовой пользователей

Доброго всем времени суток!

Недавно заметил странное, на мой взгляд, поведение системы. Если у пользователя установлен часовой пояс с GMT меньшим, чем на сервере, то у всех пользователей в графе «День рождения» он видит дату на день меньше.

Это происходит из-за того, что дата рождения обрабатывается форматером date_format, который дополнительно «переводит» часы на GMT пользователя. В итоге вместо 12-12-2012 00:00:00, записаных в БД, форматированеи проходит что-то вроде 11-12-2012 23:00:00.

Какие есть мысли по поводу такого поведения системы? Я у себя признал это багой и в форматтер в итоге добавил флаг, который задает необходимость применения GMT смещений.

Рецепт добавления поля в диалог регистрации пользователя

Сегодня ко мне обратились за помощью с вопросом добавления поля в диалог регистрации. Задача оказалась не тривиальна и показательна, так как хорошо показывает его архитектуру, поэтому хочу поделиться с сообществом процедурой ее решения.

Постановка задачи: необходимо добавить в форму регистрации пользователя поле «Имя пользователя» из его, пользователя, профиля.
Задача решается последовательно в несколько шагов:
Шаг 1. Добавление текстовки в языковой файл.
Шаг 2. Добавление поля в форму регистрации.
Шаг 3. Добавление правила валидации элемента.
Шаг 4. Обеспечение записи элемента при валидации.
Шаг 5. Доработка всплывающего окна с регистрацией.
Шаг 6. Доработка маппера.

Читать дальше →

Создание плагина. От идеи до публикации. Часть 3

Настройка типографа
Настройку типографа реализуем следующим образом: создадим файл конфигурации плагина в каталоге «config» который, в свою очередь, находиться в корне плагина и в нем проведем нехитрые опрерации по добавлению тега 'carousel' в список разрешенных jevix-ом тегов.
<?php
    $aAllowTags = Config::Get('jevix.default.cfgAllowTags');
    $aAllowTags[0][0][] = 'carousel';
    Config::Set('jevix.default.cfgAllowTags', $aAllowTags);


Читать дальше →

Создание плагина. От идеи до публикации. Часть 2.

Создание диалога добавления карусели
Прежде всего определим, каким образом карусель будет вставлена в редактор. В плагине будет использоваться следующая структура: тег «carousel» содержит одно или несколько изображений (тегов img), которые в дальнейшем можно добавлять с помощью стандартного диалога вставки изображения. Диалог вставки тега «carousel» с первым изображением мы создадим, из диалога вставки изображения. Шаблон диалога представлен в файле «skin/developer/window_load_img.tpl», его мы и будем переделывать. Созданный шаблон с помощью зарегистрированного хука будет добавлен на страницу, проинициализирован. Инструменты, обеспечивающие функционал формы будут заимствованы от диалога вставки изображения.

Читать дальше →

Создание плагина. От идеи до публикации. Часть 1.

Плагин, создание которого я опишу уже в каталоге и ссылка на него будет в самоом конце.
Идея плагина заключается в следующем: предоставить пользователю возможность добавлять в топик карусель, предоставляемую фреймворком Twitter Bootstrap. Добавление карусели будет осуществляться через встроенный редактор, для карусели будут доступны как изображения из сети, так и загруженные с компьютера пользователя.

Приступим
В начале создадим в папке plugins папку для нашего плагина с именем carousel и в нем файл plugin.xml c описанием создаваемого плагина (см. картинку ниже).


Читать дальше →

Валидация данных в LiveStreet 0.6

В транковую версию LS на github.com добавлен новый функционал — валидация данных и полей сущностей. Этот функционал призван заменить функцию func_check(). За основу был взят функционал валидации Yii.

На данный момент доступны следующие типы валидации:
  • Boolean — проверка значения на булевый тип
  • Date — проверка значения на формат даты и времени
  • Email — проверка корректности емайл
  • Inline — валидация произвольным методом сущности или другого объекта
  • Number — проверка на числа
  • Required — проверка на пустое или конкретное значение
  • String — проверка строк на длину
  • Type — проверка на тип значения
  • Url — проверка на корректность URL


Как использовать

В сущности необходимо составить список правил валидации.
class PluginTest_ModuleMain_EntityTest extends Entity {

	protected $aValidateRules=array(
		array('login, name','string','max'=>7,'min'=>'3'),
		array('title','my','on'=>'register'),
	);

	public function ValidateMy($sValue,$aParams) {
		if ($sValue!='Мега заголовок') {
                    return 'Ошибочный заголовок';
                }
		return true;
	}
}


Читать дальше →

Увеличиваем скорость livestreet. Nginx. GZip и не только.

Недавно перешел с шаред хостинга на VPS и столкнулся с проблемой что VPS работает не очень быстро, при том что тариф взял не самый дешевый (1600MHz и 1024Mb). Перекопал кучу сайтов чтобы разобраться как все сделать лучшим образом, думаю многие с этим сталкивались, хочу сэкономить ваше время и подытожить важные моменты по настройке.
Для тестирования производительности изначально использовал приложение siege, когда меня там цифры стали более-менее радовать, уже начал использовать для тестов замечательный сайт loadimpact.com (количество бесплатных проверок ограничено, не злоупотребляйте сразу). Привожу картинки как было и как стало (сразу хочу заметить увеличение производительности не только из-за настройки nginx).
1. Debian 5 (64) nginx + apache + php-fcgi + eAccelerator + memcache (Апач по сути только для ISPmanager использовался)

2. Debian 5 (32) nginx + apache + mod_php + APC + memcache


Читать дальше →

Новые возможности по переопределению/наследованию классов LiveStreet

В LS появилась новая возможность для разработчиков плагинов — наследование классов. Идея была высказана еще avadim'ом здесь.
Эта возможность позволит удобно переопределять различные методы одного класса (модуля, экшена, сущности, маппера) разными плагинами без конфликтов.
Главное отличие от делегирование — не происходит блокировки переопределения класса для других плагинов. Также есть возможность переопределения одного метода разными плагинами, но здесь разработчикам нужно быть очень осторожными и делать так, чтоб свести вероятность конфликта к минимуму.

Как использовать.
Например, нужно переопределить метод получения пути до аватара у сущности пользователя в плагине Test. В плагине необходимо объявить те классы, которые будут наследоваться. Объявление происходит в свойстве $aInherits:
<?php
class PluginTest extends Plugin {
    
    protected $aInherits=array(
       'entity'  =>array('ModuleUser_EntityUser'=>'_ModuleSide_EntityUser')
    );

    public function Activate() {        
        return true;
    }
    
    public function Init() {        
    }
}
?>

Читать дальше →