Недавно решал такую проблему, необходимо было сделать выгрузку множественных свойств из 1С, но в ней такого функционала не реализовано. Для решения этой задачи я создал в 1С свойство типа строка, например цвет, записывал в эту строку в товаре значения через разделитель запятая " синий , красный , желтый " (разделитель может быть любой, у меня их два) .
Далее я помести такой код в файл init.php
// реализуем возможность загрузки из 1С множественной строки AddEventHandler("iblock", "OnAfterIBlockElementAdd", "UpdatePluralToProp_1с"); AddEventHandler("iblock", "OnAfterIBlockElementUpdate", "UpdatePluralToProp_1с"); function UpdatePluralToProp_1с(&$arFields) { // соберем массив свойств элемента и сделаем обработку строки которая может быть множественной // переменная для разделителей $spacer = array(",", "\\"); $properties = array(); $db_props = CIBlockElement::GetProperty($arFields['IBLOCK_ID'], $arFields['ID'], array("sort" => "asc"), Array()); while ($ob = $db_props->GetNext()) { // получим свойство в котором обнаружили разделитель if($ob['CODE'] != 'CML2_ATTRIBUTES') { $properties[$ob['ID']][] = $ob; } } foreach ($properties as $keyprops => $prop) { // удалим пустые значения foreach($prop as $key_v => $values) { if(empty($values['VALUE'])){ unset($prop[$key_v]); } } if ((!empty($prop)) && (count($prop) <= 2)) { foreach ($prop as $key_pro => $v) { // пройдемся по массиву с разделителями foreach($spacer as $spacer_value) { if (strpos($v['VALUE'], $spacer_value) !== false) { // разделим строку на массив //$v['VALUE'] = str_replace(" ","",$v['VALUE']); $v['VALUE'] = trim($v['VALUE']); $PROPERTY_VALUE = array(); $arr_element_prop = array(); $arr_element_prop = explode($spacer_value, $v['VALUE']); foreach($arr_element_prop as $key_elem => $element_prop) { $element_prop = trim($element_prop); $PROPERTY_VALUE['n'.$key_elem] = array( 'VALUE'=>$element_prop ); } CIBlockElement::SetPropertyValuesEx($arFields['ID'], $arFields['IBLOCK_ID'], array($keyprops => $PROPERTY_VALUE)); } } } } } // printr($arFields);die; }
Этот код был реализован для моих задач, но другим он тоже может быть полезен :)
Опубликовано: 24 января 2012
|
|