2 бесплатных плагина + одно предложение по улучшению livestreet

Сегодня хочу поделиться с сообществом двумя плагинами — для организация сгруппированной рассылки увеломлений, для сервиса loginza — для ls 1.0. Думаю они будут полезны многим. Плюс хочу предложить одно улучшение движка, что бы можно было запускать кроны на длительное время. А то с текущей версией движка они падают занимая всю отведенную для этого память.
Читать дальше →

Добавление разделов и подразделов в блог

как можно сделать чтобы у блога был раздел вроде:

  • Информационные технологии, Интернет, Телеком
  • Бухгалтерия/Управленческий учет/Финансы предприятия
  • Маркетинг/Реклама/PR
  • и т.д

И у каждого раздела были свои подразделы.
Тоесть пользователь когда создает блог выбирает Информационные технологии, Интернет, Телеком и ему открываются подразделы этого раздела, которые он тоже отмечает для блогов.

Делаю это для более точного указания темы блогов.

Логины на кириллице

Возникла потребность сделать возможность пользователям обзываться по-русски.
Казалось бы, UTF-8, все дела — но нет: то ли из-за потенциальной возможности сделать каждому по поддомену, то ли еще почему-то, логины можно делать только латиницей.

Мне поддомены не нужны, поэтому вот решение:
В файле /classes/actions/ActionProfile.class.php в функции RegisterEvent дополняем в регэкспах \w сочетанием \p{L}
$this->AddEventPreg('/^[\w\p{L}\-\_]+$/i','/^(whois)?$/i','EventWhois');				
$this->AddEventPreg('/^[\w\p{L}\-\_]+$/i','/^favourites$/i','/^comments$/i','/^(page(\d+))?$/i','EventFavouriteComments');			
$this->AddEventPreg('/^[\w\p{L}\-\_]+$/i','/^favourites$/i','/^(page(\d+))?$/i','EventFavourite');

\w — любой строковый символ, но не юникодовский (и не кириллица)
\p{L} — любая буква юникода, конструкции друг друга отлично дополняют.

Следующий этап: правка функции проверки логина на валидность.
Находится она в файле /engine/includes/function.php и обзывается func_check()
Там тоже регулярные выражения, которые правим аналогично предыдущему файлу.

Во время тестирования регистрации я столкнулся с другим глюком: логин передавался в cp1251, а обрабатывался в юникоде. Конечно, валидатор его не понимал! Для этого лезем в файл /classes/actions/ActionRegistration.class.php и правим там функцию EventIndex(), переписав проверку логина так:
/**
 * Проверка логина
 */
$utf8 = false;
if (!func_check(getRequest('login'),'login',3,30)) {
if (!func_check(iconv('windows-1251', 'utf-8', getRequest('login')),'login',3,30)) {
	$this->Message_AddError($this->Lang_Get('registration_login_error'),$this->Lang_Get('error'));
	$bError=true; // Маленький обходной маневр для поддержки кириллицы в логинах
	} else $_REQUEST['login'] = iconv('windows-1251', 'utf-8', getRequest('login'));
}

В случае, если проверка логина провалилась, мы его проверяем еще раз в UTF. Если проверка удалась, то в _REQUEST меняем login из cp1251 в utf-8, чтоб потом не заморачиваться.

В общем, теперь можно наслаждаться кириллическими именами пользователя. И заводить тему в FAQ'е под названием «Не могу войти»;)