Автогенерация символьных кодов разделов и элементов Битрикс

Просмотров: 18450

Иногда нужно создать символьные коды для разделов и элементов. Например: если сайт создан давно и ранее работал на ID секций и элементов. Сделать можно через API битрикс

Добавление обработчика в Битрикс

Для автогенерации символьных кодов, не зависимо от того, каким образом попадают разделы и элементы на сайт (выгрузка из xml или ручное добавление), достаточно в файл /bitrix/php_interface/init.php добавить вот такой код

<?
AddEventHandler("iblock", "OnBeforeIBlockElementAdd", Array("MyClass40", "OnBeforeIBlockElementAddHandler"));
class MyClass40{
function OnBeforeIBlockElementAddHandler(&$arFields)
	{
	$name = $arFields["NAME"];
	$arParams = array("replace_space"=>"-","replace_other"=>"-");
	$trans = Cutil::translit($name,"ru",$arParams);
	$arFields["CODE"] = $trans;
	}
}
AddEventHandler("iblock", "OnBeforeIBlockSectionAdd", Array("MyClass50", "OnBeforeIBlockSectionAddHandler"));
class MyClass50{
function OnBeforeIBlockSectionAddHandler(&$arFields)
	{
	$name = $arFields["NAME"];
	$arParams = array("replace_space"=>"-","replace_other"=>"-");
	$trans = Cutil::translit($name,"ru",$arParams);
	$arFields["CODE"] = $trans;
	}
}
?>

Само собой, если сайт новый, то автогенерация вполне спокойно настраивается при создании инфоблоков, или в настройках Импорта с 1С. В большей степени, данный метод применим для уже работающих сайтов, которые хотят перейти с ID на CODE в разделах и элементах

Способ подсмотрен в блогах Битрикс

Видео: Вариант применения данного способа

Видео- запись трансляции, без монтажа, потому с провисаниями. Бонусом- способ удалить большой каталог если не удаляется:

Андрей 28.01.2016
Михаил у меня сразу вопрос напрашивается, Вы сменили более 5 тыс. УРЛ на товары разделы и т.д., а как решили вопрос с поисковиками которые индексили весь сайта все время (сайт же не новый)? Просто про редирект я не услышал, тоесть получится много битых УРЛ - 404 страниц, может что упустил.

Спасибо за ответ.

P.S. Думаю капча на комменты лишняя.
Михаил Базаров 29.01.2016
Цитата
Андрей пишет:
Михаил у меня сразу вопрос напрашивается, Вы сменили более 5 тыс. УРЛ на товары разделы и т.д., а как решили вопрос с поисковиками которые индексили весь сайта все время (сайт же не новый)? Просто про редирект я не услышал, тоесть получится много битых УРЛ - 404 страниц, может что упустил.

Спасибо за ответ.

P.S. Думаю капча на комменты лишняя.
Да, редиректа 301 не будет, по сути СЕО жизнь сайта с нуля. Можно попробовать сгенерировать редиректы со старых путей на новые- но достаточно заморочистая процедура, ручной работы (при минимум 5000 адресов, а еще на разделы-подразделы) будет очень много.

PS Капча не лишняя, спамеры одолевают сильно, боюсь и регистрацию придется сделать со временем.
Дмитрий Жева 21.08.2016
Михаил, а если символьный код во многих разделах одинаковый, но разделы то разные. И в итоге глюки. Как сделать чтобы все ровно было?
Михаил Базаров 21.08.2016
Цитата
Дмитрий Жева написал:
Михаил, а если символьный код во многих разделах одинаковый, но разделы то разные. И в итоге глюки. Как сделать чтобы все ровно было?
А как так получилось? Если разделы разные-то и символьные кода генерированы из них, транслитерацией или переводом но разные.
С одинаковыми тяжело жить, отрефакторите это дело
Дмитрий Жева 03.11.2016
Михали, я умудрился поставить битрикс 16.5 на php7, все летает. Но ваш код не работает на нем. Можете правильный код написать для PHP7? Спасибо.
Роман Юшкин 11.09.2019
Михаил Базаров, пользуясь случаем, хочу спросить про ручное добавление элементов с транслитеризацией символьного кода через add element, у меня нет по адресу /bitrix/php_interface/ файла init.php
И при его создании и внедрении в него этого кода, падает весь битрикс, экран с ошибками. Подскажите в чем может быть дело и что с этим можно сделать
Роман Юшкин 11.09.2019
Скажу больше, просто при создании файла init.php  падает вся система управления, даже если файл пустой
Роман Юшкин 11.09.2019
Через ftp все загрузилось, стоит. Но через add element, все равно не создаются символьные кода. Чувствую, себя немного как буратино)) на поле, куда копать не понимаю, зачем не понимаю, в ТП написали, что перешлют в отдел разработок, но все мы знаем, отдел разработок разрабатывает что-то другое, но не этот модуль!)) Так что, если не трудно, кто успешно спраляется с ткой задачей на раз, может немного поможете!))
Леся 17.04.2024
Подскажите можно ли настроить генерацию символьного идентификатора при создании Группы пользователей?
Михаил Базаров 17.04.2024
Да, глянте в документации событие OnBeforeGroupAdd