Сделал код, который работает:
Все устраивает, только при быстром редактировании (редактировании в списке) Символьный код не присваивается?
Попробовал применить: OnAfterIBlockElementUpdate и OnAfterIBlockElementAdd безрезультатно...
А как возможно сделать что бы и при быстром редактировании Символьный код вставлялся автоматически?
Код |
---|
<? // регистрируем обработчики AddEventHandler("iblock", "OnBeforeIBlockElementAdd", Array("MyClass", "OnBeforeIBlockElementAddHandler")); AddEventHandler("iblock", "OnBeforeIBlockElementUpdate", Array("MyClass", "OnBeforeIBlockElementUpdateHandler")); class MyClass { // создаем обработчик события "OnBeforeIBlockElementAdd" function OnBeforeIBlockElementAddHandler(&$arFields) { if($arFields['IBLOCK_ID'] == 13) // здесь указываем для какого Инфоблока будет применяться данная процедура { if(strlen($arFields['CODE'])<=0) { // достаем ID свойства Street $arFilter = Array("ACTIVE"=>"Y", "CODE"=>"Street", "IBLOCK_ID"=>$arFields['IBLOCK_ID']); $properties = CIBlockProperty::GetList(Array(), $arFilter); while ($prop_fields = $properties->GetNext()) { $prop_Street = $prop_fields["ID"]; } // достаем ID свойства House $arFilter = Array("ACTIVE"=>"Y", "CODE"=>"House", "IBLOCK_ID"=>$arFields['IBLOCK_ID']); $properties = CIBlockProperty::GetList(Array(), $arFilter); while ($prop_fields = $properties->GetNext()) { $prop_House = $prop_fields["ID"]; } $arFields["CODE"] = MyClass::imTranslite($arFields["NAME"]); // присваиваем наименование $arFields["CODE"] .= "-".MyClass::imTranslite($arFields["PROPERTY_VALUES"]["".$prop_Street.""]["".$arFields['ID'].":".$prop_Street.""]['VALUE']); // добавляем улицу $arFields["CODE"] .= "-".MyClass::imTranslite($arFields["PROPERTY_VALUES"]["".$prop_House.""]["".$arFields['ID'].":".$prop_House.""]['VALUE']); // добавляем дом $arFields["CODE"] .= "-".date('dmY'); // добавляем дату } } } // создаем обработчик события "OnBeforeIBlockElementUpdate" function OnBeforeIBlockElementUpdateHandler(&$arFields) { // echo '<pre>'; print_r($arFields); echo '<pre>'; die(); // возможно посмотреть только в НЕ быстром редактировании if($arFields['IBLOCK_ID'] == 13) { if(strlen($arFields['CODE'])<=0) { // достаем ID свойства Street $arFilter = Array("ACTIVE"=>"Y", "CODE"=>"Street", "IBLOCK_ID"=>$arFields['IBLOCK_ID']); $properties = CIBlockProperty::GetList(Array(), $arFilter); while ($prop_fields = $properties->GetNext()) { $prop_Street = $prop_fields["ID"]; } // достаем ID свойства House $arFilter = Array("ACTIVE"=>"Y", "CODE"=>"House", "IBLOCK_ID"=>$arFields['IBLOCK_ID']); $properties = CIBlockProperty::GetList(Array(), $arFilter); while ($prop_fields = $properties->GetNext()) { $prop_House = $prop_fields["ID"]; } $arFields["CODE"] = MyClass::imTranslite($arFields["NAME"]); // присваиваем наименование $arFields["CODE"] .= "-".MyClass::imTranslite($arFields["PROPERTY_VALUES"]["".$prop_Street.""]["".$arFields['ID'].":".$prop_Street.""]['VALUE']); // добавляем улицу $arFields["CODE"] .= "-".MyClass::imTranslite($arFields["PROPERTY_VALUES"]["".$prop_House.""]["".$arFields['ID'].":".$prop_House.""]['VALUE']); // добавляем дом $arFields["CODE"] .= "-".date('dmY'); // добавляем дату } } } function imTranslite($str) { static $tbl= array('а'=>'a','б'=>'b','в'=>'v','г'=>'g','д'=>'d','е'=>'e','ё'=>"yo",'ж'=>'g', 'з'=>'z','и'=>'i','й'=>'y','к'=>'k','л'=>'l','м'=>'m','н'=>'n','о'=>'o','п'=>'p','р'=>'r', 'с'=>'s','т'=>'t','у'=>'u','ф'=>'f','х'=>"h",'ц'=>"ts",'ч'=>"ch",'ш'=>"sh",'щ'=>"shch", 'ъ'=>"",'ы'=>'y','ь'=>"",'э'=>'je','ю'=>"yu",'я'=>"ya",'А'=>'A','Б'=>'B','В'=>'V','Г'=>'G', 'Д'=>'D','Е'=>'E','Ё'=>"YO",'Ж'=>'G','З'=>'Z','И'=>'I','Й'=>'Y','К'=>'K','Л'=>'L','М'=>'M', 'Н'=>'N','О'=>'O','П'=>'P','Р'=>'R','С'=>'S','Т'=>'T','У'=>'U','Ф'=>'F','Х'=>"H",'Ц'=>"TS", 'Ч'=>"CH",'Ш'=>"SH",'Щ'=>"SHCH",'Ъ'=>"",'Ы'=>'Y','Ь'=>"",'Э'=>'JE','Ю'=>"YU",'Я'=>"YA", '.'=>"",'&'=>"",'"'=>"",' '=>"_",'№'=>"",'«'=>"",'»'=>"",'('=>"",')'=>"",'—'=>"-",','=>"" ); return strtr($str, $tbl); } } ?> |
Все устраивает, только при быстром редактировании (редактировании в списке) Символьный код не присваивается?
Попробовал применить: OnAfterIBlockElementUpdate и OnAfterIBlockElementAdd безрезультатно...
А как возможно сделать что бы и при быстром редактировании Символьный код вставлялся автоматически?