Как в битриксе автоматически добавить ко всем файлам символьный код?

Как в битриксе автоматически добавить ко всем файлам символьный код?

Цель символьного кода: образовать url для товара, без символьного кода у меня пустой адрес на всех товарах, где нет символьного кода

Создал в папке php_interface файл под названием init.php

Добавил такой код:

AddEventHandler("iblock", "OnBeforeIBlockElementAdd", "addElement");
AddEventHandler("iblock", "OnBeforeIBlockElementUpdate",   array("MyEventHandlerClass", "IBlockElementAddCodeFromName"));

function addElement($arFields){

      $arParams = array(
               "max_len" => "60", // обрезаем символьный код до 60 символов
               "change_case" => "L", // приводим к нижнему регистру
               "replace_space" => "-", // меняем пробелы на тире
               "replace_other" => "-", // мен¤ем плохие символы на тире
               "delete_repeat_replace" => "true", // удаляем повтор¤ющиеся тире
               "use_google" => "false", // отключаем использование google
            );

      $arFields["CODE"] = Cutil::translit($arFields["NAME"], "ru", $arParams);

}


Сохранил, обновил кеш, но данные не изменились, т.е. ни одному товару не добавился символьный код. Может дополнительно как-то нужно вызвать функцию или еще что-то делать? Может есть другие варианты?
  • Вопрос задан
  • 1420 просмотров
Пригласить эксперта
Ответы на вопрос 1
До конца не понял, что хотите сделать.
вы поставили обработчик на событие добавления элемента, хотя это можно настроить в инфоблоке.
второй обработчик у вас не сработает
Если уже существующим товарам добавить символьный код, то
вот примерный код. суть в том, что вам надо сделать выборку, перевести название, сохранить
Здесь и разделы и элементы
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
CModule::IncludeModule('iblock');
$IBLOCK_ID = 3;
$fileElement = $_SERVER['DOCUMENT_ROOT'].'/scripts/elements.txt';
$fileSection = $_SERVER['DOCUMENT_ROOT'].'/scripts/section.txt';

$rsSections = CIBlockSection::GetList(
    array('SORT' => 'asc'),
    array('IBLOCK_ID' => $IBLOCK_ID),
    false,
    array('ID', 'NAME', 'CODE'),
    false
);
$currentSect = file_get_contents($fileSection);
$currentSect .= "-----------------\r\n";
while ($arSction = $rsSections->GetNext(false, false))
{
    echo '<pre>';
    print_r($arSction);
    echo '</pre>';
    $arParamsSect = array("replace_space"=>"-","replace_other"=>"-");
    $transSect = Cutil::translit($arSction['NAME'],"ru",$arParamsSect);
    echo '<pre>';
    print_r($transSect);
    echo '</pre>';
    $currentSect .= $arSction['CODE'].' - '.$transSect."\r\n";
    file_put_contents($fileSection, $currentSect);
    $bs = new CIBlockSection;
    $arFields = Array(
        'CODE' => $transSect
    );
    $res = $bs->Update($arSction['ID'], $arFields);
}




    $elDB = CIBlockElement::GetList(
        array('SORT' => 'asc'),
        array('IBLOCK_ID'=> $IBLOCK_ID),
        false,
        false,
        array('ID', 'NAME', 'CODE')
    );
    $currentEl = file_get_contents($fileElement);
    $currentEl .= "-----------------\r\n";

    while($arEl = $elDB->GetNext(false, false))
    {
        echo '<pre>';
        print_r($arEl);
        echo '</pre>';
        $arParams = array("replace_space"=>"-","replace_other"=>"-");
        $trans = Cutil::translit($arEl['NAME'],"ru",$arParams);
        echo '<pre>';
        print_r($trans);
        echo '</pre>';

        print_r($currentEl);
        $currentEl .= $arEl['CODE'].' - '.$trans."\r\n";
        file_put_contents($fileElement, $currentEl);
        $el = new CIBlockElement;
        $arLoadProductArray = Array(
            'CODE' =>$trans
        );
        $res = $el->Update($arEl['ID'], $arLoadProductArray);
    }
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы