Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

События OnBeforeIBlockSectionAdd и OnAfterIBlockSectionAdd

00 голосов
4
Пробую поставить обработчик на добавление раздела
Код
AddEventHandler("iblock", "OnAfterIBlockSectionAdd", Array("MyClass", "OnAfterIBlockSectionAddHandler"));

class MyClass
{
// создаем обработчик события "OnAfterIBlockSectionAdd" 
function OnAfterIBlockSectionAddHandler(&$arFields) 
{ 
//   if(strlen($arFields["CODE"])<=0) 
  // { 
   $res = CIBlockSection::GetByID($arFields["IBLOCK_SECTION_ID"]);
   if($ar_res = $res->GetNext())
   if($ar_res['DEPTH_LEVEL'] > 1){
   $arFields["CODE"] = MyClass::imTranslite($ar_res['CODE'].'_'.$arFields["NAME"]); 
   }
   return; 
   //} 
  } 

function imTranslite($str){ 
// транслитерация корректно работает на страницах с любой кодировкой 
// ISO 9-95 
   static $tbl= array( 
      'а'=>'a', 'б'=>'b', 'в'=>'v', 'г'=>'g', 'д'=>'d', 'е'=>'e', 'ж'=>'g', 'з'=>'z', 
      'и'=>'i', 'й'=>'y', 'к'=>'k', 'л'=>'l', 'м'=>'m', 'н'=>'n', 'о'=>'o', 'п'=>'p', 
      'р'=>'r', 'с'=>'s', 'т'=>'t', 'у'=>'u', 'ф'=>'f', 'ы'=>'y', 'э'=>'e', 'А'=>'A', 
      'Б'=>'B', 'В'=>'V', 'Г'=>'G', 'Д'=>'D', 'Е'=>'E', 'Ж'=>'G', 'З'=>'Z', 'И'=>'I', 
      'Й'=>'Y', 'К'=>'K', 'Л'=>'L', 'М'=>'M', 'Н'=>'N', 'О'=>'O', 'П'=>'P', 'Р'=>'R', 
      'С'=>'S', 'Т'=>'T', 'У'=>'U', 'Ф'=>'F', 'Ы'=>'Y', 'Э'=>'E', 'ё'=>"yo", 'х'=>"h", 
      'ц'=>"ts", 'ч'=>"ch", 'ш'=>"sh", 'щ'=>"shch", 'ъ'=>"", 'ь'=>"", 'ю'=>"yu", 'я'=>"ya", 
      'Ё'=>"YO", 'Х'=>"H", 'Ц'=>"TS", 'Ч'=>"CH", 'Ш'=>"SH", 'Щ'=>"SHCH", 'Ъ'=>"", 'Ь'=>"", 
      'Ю'=>"YU", 'Я'=>"YA", ' '=>"_", '№'=>"", '«'=>"<", '»'=>">", '—'=>"-" 
   ); 
    return strtr($str, $tbl); 
} }

вот такой код.

При добавлении из админки работает, а при выгрузке из 1с не срабатывает.

Есть при загрузке из 1с такие события? Или может быть можно запустить какую-то обработку уже после всей выгрузки?

Спасибо
спросил 11 Янв, 14 от Babyk (140 баллов)

4 Ответы

00 голосов
Где подключаете обработчик? В /bitrix/php_interface/init.php ?
ответил 23 Апр, 14 от Pomnep (13,960 баллов)
00 голосов
Да. В этом файле.
Пробовал создавать разделы через админку - код срабатывает. А при выгрузке - нет.

Нужно исключить одинаковые символьные коды разделов каталога. Может быть есть другой способ?
ответил 18 Авг, 14 от Babyk (140 баллов)
00 голосов
Попробуйте внутри обработчика подключить нужный модуль (инфоблоков) и результатом обработчика вернуть true.
ответил 23 Дек, 14 от Pomnep (13,960 баллов)
00 голосов
Цитата
Евгений Жуков пишет:
Попробуйте внутри обработчика подключить нужный модуль (инфоблоков) и результатом обработчика вернуть true.

Не помогло.

Вот код

Код
AddEventHandler("iblock", "OnBeforeIBlockSectionAdd", Array("MyClass", "OnBeforeIBlockSectionAddHandler"));

class MyClass
{
// создаем обработчик события "OnAfterIBlockSectionAdd" 
function OnBeforeIBlockSectionAddHandler(&$arFields) 
{ if (CModule::IncludeModule("iblock")){
   if(strlen($arFields["CODE"])<=0) 
   { 
   $res = CIBlockSection::GetByID($arFields["IBLOCK_SECTION_ID"]);
   if($ar_res = $res->GetNext())
   if($ar_res['DEPTH_LEVEL'] > 1){
   $arFields["CODE"] = MyClass::imTranslite($ar_res['CODE'].'_'.$arFields["NAME"]); 
   echo '<pre>';
   print_r($ar_res);
   echo '</pre>';
   echo '<pre>';
   print_r($arFields);
   echo '</pre>';
   //die();
   }
   return true; 
   }
   } 
  } 

function imTranslite($str){ 
// транслитерация корректно работает на страницах с любой кодировкой 
// ISO 9-95 
   static $tbl= array( 
      'а'=>'a', 'б'=>'b', 'в'=>'v', 'г'=>'g', 'д'=>'d', 'е'=>'e', 'ж'=>'g', 'з'=>'z', 
      'и'=>'i', 'й'=>'y', 'к'=>'k', 'л'=>'l', 'м'=>'m', 'н'=>'n', 'о'=>'o', 'п'=>'p', 
      'р'=>'r', 'с'=>'s', 'т'=>'t', 'у'=>'u', 'ф'=>'f', 'ы'=>'y', 'э'=>'e', 'А'=>'A', 
      'Б'=>'B', 'В'=>'V', 'Г'=>'G', 'Д'=>'D', 'Е'=>'E', 'Ж'=>'G', 'З'=>'Z', 'И'=>'I', 
      'Й'=>'Y', 'К'=>'K', 'Л'=>'L', 'М'=>'M', 'Н'=>'N', 'О'=>'O', 'П'=>'P', 'Р'=>'R', 
      'С'=>'S', 'Т'=>'T', 'У'=>'U', 'Ф'=>'F', 'Ы'=>'Y', 'Э'=>'E', 'ё'=>"yo", 'х'=>"h", 
      'ц'=>"ts", 'ч'=>"ch", 'ш'=>"sh", 'щ'=>"shch", 'ъ'=>"", 'ь'=>"", 'ю'=>"yu", 'я'=>"ya", 
      'Ё'=>"YO", 'Х'=>"H", 'Ц'=>"TS", 'Ч'=>"CH", 'Ш'=>"SH", 'Щ'=>"SHCH", 'Ъ'=>"", 'Ь'=>"", 
      'Ю'=>"YU", 'Я'=>"YA", ' '=>"_", '№'=>"", '«'=>"<", '»'=>">", '—'=>"-" 
   ); 
    return strtr($str, $tbl); 
} }


в init.php этот кодв находится перед строчкой
Код
require_once($_SERVER['DOCUMENT_ROOT']."/bitrix/php_interface/classes/include.php");
ответил 12 Апр, 15 от Babyk (140 баллов)

Похожие вопросы

0 голосов
1 ответ
0 голосов
2 ответов
спросил 17 Март, 14 от Burt (100 баллов)
0 голосов
3 ответов
спросил 11 Март, 14 от Mageradje (660 баллов)
0 голосов
3 ответов
спросил 24 Янв, 14 от NARGL (100 баллов)
0 голосов
1 ответ
спросил 23 Янв, 14 от Aribor (560 баллов)