Итак вот вам маленький пример, снипет, как можно легко подготавливать добавляемые элементы для поддержки ЧПУ в Битриксе.
Вообще считаю что это должно быть по умолчанию. Т.е. выставляться в настройках инфоблока просто галочкой, так как это займет для разработчиков БУС примерно 1 час.
Пока этого нет, будем делать сами. Итак сейчас в стандартном функционале множества компонент добавили ЧПУ по полю CODE элемента. Это хорошее поле и удобно с ним работать, да и именно для этого оно видимо и предназначено, хотя можно использовать и просто свойства да и пользовательские свойства тоже.
Итак задача :
1. Нужно название элемента переводить в траслит и добавлять его в поле CODE.
2. Это нужно делать автоматически.
Перевод в транслит:
Для этого я не стал сильно замарачивать и нашел функцию в интернете. Да и написать ее особого труда не составит конечно.
[source language=’php’]
function translit($str)
{
$tr = array(
«А»=>»a»,»Б»=>»b»,»В»=>»v»,»Г»=>»g»,
«Д»=>»d»,»Е»=>»e»,»Ж»=>»j»,»З»=>»z»,»И»=>»i»,
«Й»=>»y»,»К»=>»k»,»Л»=>»l»,»М»=>»m»,»Н»=>»n»,
«О»=>»o»,»П»=>»p»,»Р»=>»r»,»С»=>»s»,»Т»=>»t»,
«У»=>»u»,»Ф»=>»f»,»Х»=>»h»,»Ц»=>»ts»,»Ч»=>»ch»,
«Ш»=>»sh»,»Щ»=>»sch»,»Ъ»=>»»,»Ы»=>»yi»,»Ь»=>»»,
«Э»=>»e»,»Ю»=>»yu»,»Я»=>»ya»,»а»=>»a»,»б»=>»b»,
«в»=>»v»,»г»=>»g»,»д»=>»d»,»е»=>»e»,»ж»=>»j»,
«з»=>»z»,»и»=>»i»,»й»=>»y»,»к»=>»k»,»л»=>»l»,
«м»=>»m»,»н»=>»n»,»о»=>»o»,»п»=>»p»,»р»=>»r»,
«с»=>»s»,»т»=>»t»,»у»=>»u»,»ф»=>»f»,»х»=>»h»,
«ц»=>»ts»,»ч»=>»ch»,»ш»=>»sh»,»щ»=>»sch»,»ъ»=>»y»,
«ы»=>»yi»,»ь»=>»»,»э»=>»e»,»ю»=>»yu»,»я»=>»ya»,
» «=> «-«, «.»=> «», «/»=> «-»
);
return strtr($str,$tr);
}
[/source]
Создаем обработчик
[source language=’php’]
// регистрируем обработчик
AddEventHandler(«iblock», «OnBeforeIBlockElementAdd», Array(«MyEvent», «OnBeforeIBlockElementAddHandler»));
/**
* Класс для обработчиков
* @author remitmaster
*
*/
class MyEvent
{
function OnBeforeIBlockElementAddHandler(&$arFields)
{
$s_Name = trim($arFields[‘NAME’]);
if(strlen($arFields[‘CODE’]) <= 0)
{
$arFields['CODE'] = translit($s_Name);
}
// if($arFields["ID"]>0)
// AddMessage2Log(«Запись с кодом «.implode(‘|’, $arFields).» добавлена.»);
// else
// AddMessage2Log(«Ошибка добавления записи («.$arFields[«RESULT_MESSAGE»].»).»);
}
}
[/source]
Вот в принципе и все, это все нужно положить в bitrix/php_interface/init.php. При добавлении элемента сразу будет писаться название в транслите в поле CODE.
Код как пример, можно сделать проверку на правильность URL чтобы вообще не думать об этом.
ЫЫ =)) У меня почти тоже самое изначально было написано. Смотрите, чего не хватает:
1. обязательно нужно trim на строку и чистить от нескольких пробелов подряд, иначе будет — в урле
2. указать все символы, которые можно ввести с клавиатуры (а то насмотрелись)
3. Ковычки из строки сносить
А как можно на Битриксе победить URL с русскими символами? Просто нужно это сделать, а никак не могу накопать. Можете подсказать хотя-бы в какую сторону искать счастье? :)
после добавления в файл init сайт вообще не грузится ((
Неплохо, но к чему такие изыски, когда в Битрикс есть своя функция? http://www.julliet.ru/articles/translit-v-bitriks-nedokumentirovanaya-funkcziya.html
Битрис это сделал на много позже чем делали каждый раз разработчики.
Не вопрос. Так во всем — можно изобретать костыли, а можно остановиться и просто подумать. В доках пробелов просто правда много.
В стье «ХМЛ парсер битрикса» Вы писали: «Все больше и больше меня раздражают деятели любящие писать собственные поделки». Зачем же в этой статье вы предлагаете свою транслитерацию а не используете битриксовую?
Эт уже изобретение велосипеда ;)
Битрис это сделал на много позже чем делали каждый раз разработчики. Сейчас это все из коробки, но посмотрите на дату поста и версию битрикса :)