staker
Мастер
- Регистрация
- 24 Ноя 2006
- Сообщения
- 227
- Реакции
- 33
- Автор темы
- #1
Как бы это сделать? Открываем движек и смотрим где формируются url. К ужасу видим, что файлов этих много. Вникаем и видим, а ларчик-то просто открывается. Пишем функцию, собсно можно и без нее, но все-таки. Как известно, в ДЛЕ для перевода названия новости в транслит существует специальная функция, имя ей totranslit Свою же мы назовем tocirilic Вот её код (не забудьте её добавить в engine/modules/functions.php и в engine/inc/functions.inc.php)
Как видите изобретать велосипед я не стал, а просто взял функцию ДЛЕ и убрал от туда лишнее, плюс переименовал её ) Программисты спросят, зачем нужны $NpjCaps $NpjSmall и strtr( $var, $NpjCaps, $NpjSmall ); ведь для этого есть более удобная функция в PHP, имя ей strtolower(), но в даном случае ,эта функция не будет работать как нужно, по сему мы сделали так. Дальше все просто, идем по всем файлам и меняем totranslit на tocirilic вуаля, у нас кирилические url p.s. Чтобы в старых новостях появились кирилические url, нужно отредактировать их в админке, ну или написать простенький скриптик, который это сделает за вас
(c) Alex
PHP:
function tocirilic($var, $lower = true, $punkt = true) {
$NpjCaps = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЪЫЭЮЯЇЄІ";
$NpjSmall = "абвгдеёжзийклмнопрстуфхцчшщьъыэюяїєі";
$var = str_replace( ".php", "", $var );
$var = trim( strip_tags( $var ) );
$var = preg_replace( "/\s+/ms", "-", $var );
$var = strtr( $var, $NpjCaps, $NpjSmall );
if ( $punkt ) $var = preg_replace( "/[^a-z0-9\_\-.]+/mi", "", $var );
else $var = preg_replace( "/[^a-z0-9\_\-]+/mi", "", $var );
$var = preg_replace( '#[\-]+#i', '-', $var );
if ( $lower ) $var = strtolower( $var );
return $var;
}
(c) Alex