Добрый день! Делаю интернет-магазин который в дальнейшем буду интегрировать с 1С. Раньше для разбивки свойств из 1С использовал вот такой скрипт:
но как выяснилось сейчас для отбора торговых предложений 1С Битрикс использует свойства типа список или справочник (а сайт как на зло уже наполнин и я обновился )) ). Ну ладно рас использут наверное на тоесть причны. Решил всё передалать и начать именно с этого скрипта. Хотелось бы понять как программно добавить свойства типа справочник взятые из CML2_ATTRIBUTES? Т.к. это магазин одежды и у нас есть свойство цвет, в будущем может потребоваться вывод картинок, лучше делать всё свойством "Справочник".
Ну и вообще если кто-то подскажет как сейчас осуществляется работа по интеграции с 1С на стороне сайта, поделитесь ссылками )) .
Заранее спасибо!
Код |
---|
/*Разбиваем характеристики торговых предложени по отдельным свойствам*/ AddEventHandler("iblock", "OnAfterIBlockElementUpdate", Array("EXT1C", "ATTRIBUTES2PROP")); AddEventHandler("iblock", "OnAfterIBlockElementAdd", Array("EXT1C", "ATTRIBUTES2PROP")); class EXT1C { function ATTRIBUTES2PROP(&$arFields) { //if ((@$_REQUEST['IBLOCK_TYPE']=='catalog') && (@$_REQUEST['Import']=='Y'))//импорт по средствам XML? $IBLOCK_ID = $arFields['IBLOCK_ID']; $ELEMENT_ID = $arFields['ID']; //получаем массив значений множественного свойства CML2_ATTRIBUTES в которое стандартно выгружаются характеристики ТП из 1С $CML2_ATTRIBUTES = CIBlockElement::GetProperty($IBLOCK_ID, $ELEMENT_ID, array("sort" => "asc"), Array("CODE"=>"CML2_ATTRIBUTES")); while ($CML2_ATTRIBUTE = $CML2_ATTRIBUTES->GetNext()) { $VALUE = $CML2_ATTRIBUTE['VALUE'];//значение характеристики $DESCRIPTION = $CML2_ATTRIBUTE['DESCRIPTION'];//название характеристики //проверяем, есть ли свойство с названием как в описание значения свойства в CML2_ATTRIBUTES $PROP = CIBlockElement::GetProperty($IBLOCK_ID, $ELEMENT_ID, array("sort" => "asc"), Array("NAME"=> $DESCRIPTION)); //если свойств нет, то создаем его, чтобы потом в него записать значение из CML2_ATTRIBUTES if(!$ar_props = $PROP->Fetch()) { //транслителируем символьный код из наименования $CODE = CUtil::translit($DESCRIPTION, 'ru', array( "max_len" => 50, "change_case" => 'U', // 'L' - toLower, 'U' - toUpper, false - do not change "replace_space" => '_', "replace_other" => '_', "delete_repeat_replace" => true, )); //добавляем '_' в код свойства, если его наименование начинается с цифры if(preg_match('/^[0-9]/', $CODE)) $CODE = '_'.$CODE; $arFields = Array( "NAME" => $DESCRIPTION, "ACTIVE" => "Y", "SORT" => "500", "CODE" => $CODE, "PROPERTY_TYPE" => "S", "IBLOCK_ID" => $IBLOCK_ID, ); //заполняем созданное свойство $ibp = new CIBlockProperty; if ($PropID = $ibp->Add($arFields)) CIBlockElement::SetPropertyValueCode($ELEMENT_ID, $CODE, $VALUE); } //если свойство с таким названием уже было, то заполняем его значением из CML2_ATTRIBUTES else { CIBlockElement::SetPropertyValuesEx($ELEMENT_ID, $IBLOCK_ID, array($ar_props['CODE'] => $VALUE)); } } } } |
но как выяснилось сейчас для отбора торговых предложений 1С Битрикс использует свойства типа список или справочник (а сайт как на зло уже наполнин и я обновился )) ). Ну ладно рас использут наверное на тоесть причны. Решил всё передалать и начать именно с этого скрипта. Хотелось бы понять как программно добавить свойства типа справочник взятые из CML2_ATTRIBUTES? Т.к. это магазин одежды и у нас есть свойство цвет, в будущем может потребоваться вывод картинок, лучше делать всё свойством "Справочник".
Ну и вообще если кто-то подскажет как сейчас осуществляется работа по интеграции с 1С на стороне сайта, поделитесь ссылками )) .
Заранее спасибо!
Всё сбудется, стоит только расхотеть...