Здравствуйте,
Я занимаюсь 1с, в php не силен, перестала работать подстановка картинок для цветов товаров, для решения этой задачи, ранее разработчик со стороны сайта делал скрипт (код ниже). Сейчас связи нет с автором скрипта. Может кто подскажет при каких условиях картинка подставляется (что из 1с мне необходимо выгрузить)? У нас есть у торговых предложений два свойства: цвет и цвет производителя, у товаров тоже есть свойство цвет.
Я занимаюсь 1с, в php не силен, перестала работать подстановка картинок для цветов товаров, для решения этой задачи, ранее разработчик со стороны сайта делал скрипт (код ниже). Сейчас связи нет с автором скрипта. Может кто подскажет при каких условиях картинка подставляется (что из 1с мне необходимо выгрузить)? У нас есть у торговых предложений два свойства: цвет и цвет производителя, у товаров тоже есть свойство цвет.
Код |
---|
<? AddEventHandler("iblock", "OnBeforeIBlockElementUpdate", Array("AddColorClass", "OnBeforeIBlockElementAddHandler")); AddEventHandler("iblock", "OnBeforeIBlockElementAdd", Array("AddColorClass", "OnBeforeIBlockElementAddHandler")); AddEventHandler("iblock", "OnBeforeIBlockElementUpdate", Array("AddBrandClass", "OnBeforeIBlockElementAddHandler")); AddEventHandler("iblock", "OnBeforeIBlockElementAdd", Array("AddBrandClass", "OnBeforeIBlockElementAddHandler")); use Bitrix\Highloadblock as HL; use Bitrix\Main\Entity; class AddColorClass { const CATALOG_IBLOCK_ID = 52; //вместо 12 подставить ID инфоблока Каталога const CATALOG_IBLOCK_ID_OFFER = 53; const COLOR_OLD_ID_GOOD = 796; const COLOR_OLD_ID_OFFER = 835; const COLOR_NEW_ID_GOOD = 742; const COLOR_NEW_ID_OFFER = 788; const COLOR_HB_ID = 3; public static function translit($str) { $rus = array('А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я', 'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я',' ','(',')','.',',','/','"','\'','+','"'); $lat = array('a', 'b', 'v', 'g', 'd', 'e', 'e', 'gh', 'z', 'i', 'y', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'f', 'h', 'c', 'ch', 'sh', 'sch', '', 'y', '', 'e', 'yu', 'ya', 'a', 'b', 'v', 'g', 'd', 'e', 'e', 'gh', 'z', 'i', 'y', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'f', 'h', 'c', 'ch', 'sh', 'sch', '', 'y', '', 'e', 'yu', 'ya', '-', '', '','-','-','-','','','-',''); return mb_strtolower(str_replace($rus, $lat, $str)); } function OnBeforeIBlockElementAddHandler(&$arFields) { //file_put_contents($_SERVER["DOCUMENT_ROOT"] . "/log.txt", var_export($arFields, true), FILE_APPEND); if(($arFields["IBLOCK_ID"] == self::CATALOG_IBLOCK_ID)) { $elementId = $arFields['ID']; $colorName = ''; //file_put_contents($_SERVER["DOCUMENT_ROOT"] . "/log1.txt", var_export($arFields, true), FILE_APPEND); foreach ($arFields['PROPERTY_VALUES'][self::COLOR_OLD_ID_GOOD] as $value) { if (strlen($value['VALUE'])>0) $colorName = $value['VALUE']; //file_put_contents($_SERVER["DOCUMENT_ROOT"] . "/log.txt", var_export($colorName, true), FILE_APPEND); } $property_enums = CIBlockPropertyEnum::GetList(Array("DEF"=>"DESC", "SORT"=>"ASC"), Array("IBLOCK_ID"=>self::CATALOG_IBLOCK_ID, "PROPERTY_ID"=>self::COLOR_OLD_ID_GOOD)); $arProp = array(); while($enum_fields = $property_enums->GetNext()) { $arProp[$enum_fields["ID"]] = $enum_fields["VALUE"]; } if(isset($arProp[$colorName]) && !empty($arProp[$colorName])) $colorName = $arProp[$colorName]; if (strlen($colorName)>0) { CModule::IncludeModule('highloadblock'); CModule::IncludeModule('iblock'); global $APPLICATION; $hlblock = HL\HighloadBlockTable::getById(self::COLOR_HB_ID)->fetch(); $entity = HL\HighloadBlockTable::compileEntity($hlblock); $entity_data_class = $entity->getDataClass(); $name = trim($colorName); $link_name = AddColorClass::translit($name); $vendors_res = $entity_data_class::getList(array( 'filter' => array('UF_XML_ID' => $link_name), 'select' => array('ID'), 'order' => array() )); if($vendors_ob = $vendors_res->Fetch()){} else { $result = $entity_data_class::add(array( 'UF_NAME' => $name, 'UF_XML_ID' => $link_name, )); } foreach ($arFields['PROPERTY_VALUES'][self::COLOR_NEW_ID_GOOD] as $k => $value) { $arFields["PROPERTY_VALUES"][self::COLOR_NEW_ID_GOOD][$k] = array('VALUE' => $link_name); } return true; } } if(($arFields["IBLOCK_ID"] == self::CATALOG_IBLOCK_ID_OFFER)) { $elementId = $arFields['ID']; $colorName = ''; foreach ($arFields['PROPERTY_VALUES'][self::COLOR_OLD_ID_OFFER] as $value) { if (strlen($value['VALUE'])>0) $colorName = $value['VALUE']; } $property_enums = CIBlockPropertyEnum::GetList(Array("DEF"=>"DESC", "SORT"=>"ASC"), Array("IBLOCK_ID"=>self::CATALOG_IBLOCK_ID_OFFER, "PROPERTY_ID"=>self::COLOR_OLD_ID_OFFER)); $arProp = array(); while($enum_fields = $property_enums->GetNext()) { $arProp[$enum_fields["ID"]] = $enum_fields["VALUE"]; } if(isset($arProp[$colorName]) && !empty($arProp[$colorName])) $colorName = $arProp[$colorName]; if (strlen($colorName)>0) { CModule::IncludeModule('highloadblock'); CModule::IncludeModule('iblock'); global $APPLICATION; $hlblock = HL\HighloadBlockTable::getById(self::COLOR_HB_ID)->fetch(); $entity = HL\HighloadBlockTable::compileEntity($hlblock); $entity_data_class = $entity->getDataClass(); $name = trim($colorName); $link_name = AddColorClass::translit($name); $vendors_res = $entity_data_class::getList(array( 'filter' => array('UF_XML_ID' => $link_name), 'select' => array('ID'), 'order' => array() )); if($vendors_ob = $vendors_res->Fetch()){} else { $result = $entity_data_class::add(array( 'UF_NAME' => $name, 'UF_XML_ID' => $link_name, )); } foreach ($arFields['PROPERTY_VALUES'][self::COLOR_NEW_ID_OFFER] as $k => $value) { $arFields["PROPERTY_VALUES"][self::COLOR_NEW_ID_OFFER][$k] = array('VALUE' => $link_name); } return true; } } return; } } class AddBrandClass { const CATALOG_IBLOCK_ID = 52; //вместо 12 подставить ID инфоблока Каталога const COLOR_OLD_ID_GOOD = 794; const COLOR_NEW_ID_GOOD = 784; const COLOR_HB_ID = 4; public static function translit($str) { $rus = array('А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я', 'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я',' ','(',')','.',',','/','"','\'','+','"'); $lat = array('a', 'b', 'v', 'g', 'd', 'e', 'e', 'gh', 'z', 'i', 'y', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'f', 'h', 'c', 'ch', 'sh', 'sch', '', 'y', '', 'e', 'yu', 'ya', 'a', 'b', 'v', 'g', 'd', 'e', 'e', 'gh', 'z', 'i', 'y', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'f', 'h', 'c', 'ch', 'sh', 'sch', '', 'y', '', 'e', 'yu', 'ya', '-', '', '','-','-','-','','','-',''); return mb_strtolower(str_replace($rus, $lat, $str)); } function OnBeforeIBlockElementAddHandler(&$arFields) { //file_put_contents($_SERVER["DOCUMENT_ROOT"] . "/log.txt", var_export($arFields, true), FILE_APPEND); if(($arFields["IBLOCK_ID"] == self::CATALOG_IBLOCK_ID)) { $elementId = $arFields['ID']; $colorName = ''; //file_put_contents($_SERVER["DOCUMENT_ROOT"] . "/log1.txt", var_export($arFields, true), FILE_APPEND); foreach ($arFields['PROPERTY_VALUES'][self::COLOR_OLD_ID_GOOD] as $value) { if (strlen($value['VALUE'])>0) $colorName = $value['VALUE']; //file_put_contents($_SERVER["DOCUMENT_ROOT"] . "/log.txt", var_export($colorName, true), FILE_APPEND); } $property_enums = CIBlockPropertyEnum::GetList(Array("DEF"=>"DESC", "SORT"=>"ASC"), Array("IBLOCK_ID"=>self::CATALOG_IBLOCK_ID, "PROPERTY_ID"=>self::COLOR_OLD_ID_GOOD)); $arProp = array(); while($enum_fields = $property_enums->GetNext()) { $arProp[$enum_fields["ID"]] = $enum_fields["VALUE"]; } if(isset($arProp[$colorName]) && !empty($arProp[$colorName])) $colorName = $arProp[$colorName]; if (strlen($colorName)>0) { CModule::IncludeModule('highloadblock'); CModule::IncludeModule('iblock'); global $APPLICATION; $hlblock = HL\HighloadBlockTable::getById(self::COLOR_HB_ID)->fetch(); $entity = HL\HighloadBlockTable::compileEntity($hlblock); $entity_data_class = $entity->getDataClass(); $name = trim($colorName); $link_name = AddColorClass::translit($name); $vendors_res = $entity_data_class::getList(array( 'filter' => array('UF_XML_ID' => $link_name), 'select' => array('ID'), 'order' => array() )); if($vendors_ob = $vendors_res->Fetch()){} else { $result = $entity_data_class::add(array( 'UF_NAME' => $name, 'UF_XML_ID' => $link_name, )); } foreach ($arFields['PROPERTY_VALUES'][self::COLOR_NEW_ID_GOOD] as $k => $value) { $arFields["PROPERTY_VALUES"][self::COLOR_NEW_ID_GOOD][$k] = array('VALUE' => $link_name); } return true; } } return; } } ?> |