Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.


Генерация символьных кодов для разделов и элементов инфоблоков

Задача:
С генерировать символьные коды для разделов или элементов инфоблока - если они не заданы

Используя скрипт предложенный Николаем Ефремовым делаем так:

1/ открываем командную строку PHP - Рабочий стол - Настройки - Инструменты - Командная PHP-строка [/bitrix/admin/php_command_line.php]
Скопировать в область кода следующий скрипт
if(!CModule::IncludeModule("iblock"))
{
   echo "Error with iblock module!";
   die;
}
$arParams['IBLOCK_ID'] = 17;
$arParams['LIST_CNT'] = 50;
$arParams['IS_ADD_RAND'] = false;
$arParams['TYPE_WORK'] = 'section'; // {section | element}


$arOrder = array(
   "sort" => "inc",
);

$arFilter = array(
   "IBLOCK_ID" => $arParams['IBLOCK_ID'],
   "IBLOCK_LID" => SITE_ID,
   //"CODE" => "",
   "CODE" => false
);

$arTransParams = array(
   "max_len" => 100,
   "change_case" => 'L', // 'L' - toLower, 'U' - toUpper, false - do not change
   "replace_space" => '-',
   "replace_other" => '-',
   "delete_repeat_replace" => true
);

if($arParams['TYPE_WORK'] == 'section'){
   //for SECTIONS
   $db_elemens = CIBlockSection::GetList($arOrder, $arFilter, false);
   $db_elemens->NavStart($arParams['LIST_CNT']);
   echo '<pre>';
   while($ar_res = $db_elemens->GetNext())
   {
      $transName = CUtil::translit($ar_res["NAME"], "ru", $arTransParams);
      if($arParams['IS_ADD_RAND']){
         $transName = $transName.$arTransParams["replace_space"].$ar_res["ID"];
      }
      $arPropArray = Array( "CODE" => $transName );
      
      $el = new CIBlockSection;
      $res = $el->Update($ar_res["ID"], $arPropArray);
      echo "result for <b>".$ar_res["NAME"]."</b> is <b>".$transName.'</b>'.($res?" and OK":" and failed")."\r\n";
   }
   echo '</pre>';
}elseif($arParams['TYPE_WORK'] == 'element'){
   // for ELEMENTS
   $db_elemens = CIBlockElement::GetList($arOrder, $arFilter, false, array("nTopCount" => $arParams['LIST_CNT']));

   $i = 0;
   echo '<pre>';
   while($obElement = $db_elemens->GetNextElement())
   {
      $ar_res = $obElement->GetFields();
      
      $transName = CUtil::translit($ar_res["NAME"], "ru", $arTransParams);
      if($arParams['IS_ADD_RAND']){
         $transName = $transName.$arTransParams["replace_space"].$ar_res["ID"];
      }
      $arPropArray = Array( "CODE" => $transName, );
      
      $el = new CIBlockElement;
      $res = $el->Update($ar_res["ID"], $arPropArray);
      echo "result for <b>".$ar_res["NAME"]."</b> is <b>".$transName.'</b>'.($res?" and OK":" and failed")."\r\n";
   }
   echo '</pre>';
}


2/ Определяемся с инфоблоком - ниже в скрипте в параметр $arParams['IBLOCK_ID'] нужно записать его ID

3/ Решаем, нужно ли нам генерировать совсем уникальные коды. Можно вначале пройтись и создать не повторяющиеся, а для повторяющихся добавить в конце ID. За это отвечает параметр $arParams['IS_ADD_RAND'] - {true|false}

4/ Указываем шаг выборки - параметр $arParams['LIST_CNT'] - большим не стоит делать, максимум 100 элементов за раз

5/ Настраиваем параметры транслита. За это отвечает массив $arTransParams

$arTransParams = array(
   "max_len" => 100,
   "change_case" => 'L', // 'L' - toLower, 'U' - toUpper, false - do not change
   "replace_space" => '-',
   "replace_other" => '-',
   "delete_repeat_replace" => true
);


6/ Указываем для чего будем проводить генерацию - для разделов или для элементов - параметр $arParams['TYPE_WORK'] - возможные значения - {section | element}

7/ Жмем кнопку выполнить - прогнать скрипт нужное количество раз

 

 

Источник: https://dev.1c-bitrix.ru/community/webdev/user/30522/blog/6794/

Назад в раздел

Подписаться на новые материалы раздела:














CAPTCHA