Недавно решал такую проблему, необходимо было сделать выгрузку множественных свойств из 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
|
|
|