Итак вот вам маленький пример, снипет, как можно легко подготавливать добавляемые элементы для поддержки ЧПУ в Битриксе.
Вообще считаю что это должно быть по умолчанию. Т.е. выставляться в настройках инфоблока просто галочкой, так как это займет для разработчиков БУС примерно 1 час.
Пока этого нет, будем делать сами. Итак сейчас в стандартном функционале множества компонент добавили ЧПУ по полю CODE элемента. Это хорошее поле и удобно с ним работать, да и именно для этого оно видимо и предназначено, хотя можно использовать и просто свойства да и пользовательские свойства тоже.
Итак задача :
1. Нужно название элемента переводить в траслит и добавлять его в поле CODE.
2. Это нужно делать автоматически.
Перевод в транслит:
Для этого я не стал сильно замарачивать и нашел функцию в интернете. Да и написать ее особого труда не составит конечно.
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); }
Создаем обработчик
// регистрируем обработчик AddEventHandler("iblock", "OnBeforeIBlockElementAdd", Array("MyEvent", "OnBeforeIBlockElementAddHandler")); /** * Класс для обработчиков * @author remitmaster * */ class MyEvent { function OnBeforeIBlockElementAddHandler(&amp;amp;$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"].")."); } }
Вот в принципе и все, это все нужно положить в bitrix/php_interface/init.php. При добавлении элемента сразу будет писаться название в транслите в поле CODE.
Код как пример, можно сделать проверку на правильность URL чтобы вообще не думать об этом.
ЫЫ =)) У меня почти тоже самое изначально было написано. Смотрите, чего не хватает:
1. обязательно нужно trim на строку и чистить от нескольких пробелов подряд, иначе будет — в урле
2. указать все символы, которые можно ввести с клавиатуры (а то насмотрелись)
3. Ковычки из строки сносить
А как можно на Битриксе победить URL с русскими символами? Просто нужно это сделать, а никак не могу накопать. Можете подсказать хотя-бы в какую сторону искать счастье? :)
после добавления в файл init сайт вообще не грузится ((
Неплохо, но к чему такие изыски, когда в Битрикс есть своя функция? http://www.julliet.ru/articles/translit-v-bitriks-nedokumentirovanaya-funkcziya.html
Битрис это сделал на много позже чем делали каждый раз разработчики.
Не вопрос. Так во всем — можно изобретать костыли, а можно остановиться и просто подумать. В доках пробелов просто правда много.
В стье «ХМЛ парсер битрикса» Вы писали: «Все больше и больше меня раздражают деятели любящие писать собственные поделки». Зачем же в этой статье вы предлагаете свою транслитерацию а не используете битриксовую?
Эт уже изобретение велосипеда ;)
Битрис это сделал на много позже чем делали каждый раз разработчики. Сейчас это все из коробки, но посмотрите на дату поста и версию битрикса :)