1c-bitrix / php · 03.02.2010

Битрикс ЧПУ, готовим символьный код элемента [bitrix api]

Итак вот вам маленький пример, снипет, как можно легко подготавливать добавляемые элементы для поддержки ЧПУ в Битриксе.

Вообще считаю что это должно быть по умолчанию. Т.е. выставляться в настройках инфоблока просто галочкой, так как это займет для разработчиков БУС примерно 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(&$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 чтобы вообще не думать об этом.