Протестировал, получился вот такой окончательный вариант, чуть изменил транслитерацию (заменил пробелы на подчеркивание):
[CODE]
// файл /bitrix/php_interface/init.php
// регистрируем обработчик, при сохранении инфоблока, заполнаем поле "Символьный код" транслитерацией имени заголовка новости
AddEventHandler("iblock", "OnBeforeIBlockElementAdd", Array("CymCode", "OnBeforeIBlockElementAddHandler"));
class CymCode
{
// создаем обработчик события "OnBeforeIBlockElementAdd"
function OnBeforeIBlockElementAddHandler(&$arFields)
{
if(strlen($arFields["CODE"])<=0)
{
$arFields["CODE"] = CymCode::imTranslite($arFields["NAME"])."_".date('dmY');
log_array($arFields); // убрать после отладки
return;
}
}
// ф-ю взял тут же, на форуме, записывает все что передадут в /bitrix/log.txt
function log_array() {
$arArgs = func_get_args();
$sResult = '';
foreach($arArgs as $arArg) {
$sResult .= "\n\n".print_r($arArg, true);
}
if(!defined('LOG_FILENAME')) {
define('LOG_FILENAME', $_SERVER['DOCUMENT_ROOT'].'/bitrix/log.txt');
}
AddMessage2Log($sResult, 'log_array -> ');
}
function imTranslite($str){
// транслитерация корректно работает на страницах с любой кодировкой
// ©Imbolc http://php.imbolc.name
static $tbl= array(
'а'=>'a', 'б'=>'b', 'в'=>'v', 'г'=>'g', 'д'=>'d', 'е'=>'e', 'ж'=>'g', 'з'=>'z',
'и'=>'i', 'й'=>'y', 'к'=>'k', 'л'=>'l', 'м'=>'m', 'н'=>'n', 'о'=>'o', 'п'=>'p',
'р'=>'r', 'с'=>'s', 'т'=>'t', 'у'=>'u', 'ф'=>'f', 'ы'=>'i', 'э'=>'e', 'А'=>'A',
'Б'=>'B', 'В'=>'V', 'Г'=>'G', 'Д'=>'D', 'Е'=>'E', 'Ж'=>'G', 'З'=>'Z', 'И'=>'I',
'Й'=>'Y', 'К'=>'K', 'Л'=>'L', 'М'=>'M', 'Н'=>'N', 'О'=>'O', 'П'=>'P', 'Р'=>'R',
'С'=>'S', 'Т'=>'T', 'У'=>'U', 'Ф'=>'F', 'Ы'=>'I', 'Э'=>'E', 'ё'=>"yo", 'х'=>"h",
'ц'=>"ts", 'ч'=>"ch", 'ш'=>"sh", 'щ'=>"shch", 'ъ'=>"", 'ь'=>"", 'ю'=>"yu", 'я'=>"ya",
'Ё'=>"YO", 'Х'=>"H", 'Ц'=>"TS", 'Ч'=>"CH", 'Ш'=>"SH", 'Щ'=>"SHCH", 'Ъ'=>"", 'Ь'=>"",
'Ю'=>"YU", 'Я'=>"YA", ' '=>"_"
);
return strtr($str, $tbl);
}
}
[/CODE]
ЗЫ Возможно, стоит добавить это решение в FAQ.