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

Эндрюс

Производительность

Кто-нибудь занималься плотной работой над производительностью LS?
На небольшой посещаемости отключение кэша делает сайт гораздо шустрее. Но дальше-то так не получится.
Может, кто-то экспериментировал со статическим кэшем? То бишь сохранением результата парсинга шаблона в файл, и потом загрузкой этого файла, если пользователь неавторизован?

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

Возникла потребность сделать возможность пользователям обзываться по-русски.
Казалось бы, 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'е под названием «Не могу войти»;)