Из 1с выгружаются характеристики строкой вида (44, красный) размер/цвет соответственно. В "умном" фильтре сначала отображается все размеры, а затем все цвета, но это всё сплошным списком, как бы разграничить, Размер и ниже размеры, рядом колонка Цвет и ниже цвета?
Строка ведь имеет определенный порядок (последовательность свойств) и определенный разделитель ну так парсите эту строку со свойствами после обмена с 1С и загоняйте эти свойства в свойства инфоблока - которые у укажите в умном фильтре!
Виталий Черепанов пишет: Строка ведь имеет определенный порядок (последовательность свойств) и определенный разделитель ну так парсите эту строку со свойствами после обмена с 1С и загоняйте эти свойства в свойства инфоблока - которые у укажите в умном фильтре!
" после обмена с 1С " - используйте события!!!
Спасибо за ответ. Как парсить я знаю, а вот где это сделать "после обмена с 1с" и где загнать в свойства инфоблока?
ПОСЛЕ ОБМЕНА с 1С - есть событие OnSuccessCatalogImport1C (http://dev.1c-bitrix.ru/api_help/catalog/events/index.php) делаете обработку события в init.php в которую пишите парсер и в котором полученные значения вносите в соответствующие свойства элемента. алгоритм такой: 1. производится полная выгрузка на сайта (свойства из 1С выгружаются в соответствующие свойства каждого товара (у товара есть еще и ID, как Вы знаете) 2. После выгрузки запускается обработка по событию OnSuccessCatalogImport1C в которой Вы проходитесь по всем вновь выгруженным товарам (можно по времени создания/изменения выборку делать) 3. берете выгруженное свойство, парсите и записываете в соответствующие свойства товара (которые надо создать заранее) работа со свойствами элемента инфоблока http://dev.1c-bitrix.ru/api_help/iblock/classes/ciblockelement/index.php
Я тут заметил, что в торговых предложениях уже это всё есть, как свойства и автоматически разделилось на размер и цвет, вот только если я указываю в качестве ИБ торговое предложение в умном фильтре, то там ничего недоступно для вывода, почему?
А Вы в умном фильтре укажите укажите основной каталог!!!!!
а чтобы понять.... посмотрите какие свойства есть в карточке товара - потом перейдите в свойства инфоблока и посмотрите какие там свойства - может поймете!!!!
Виталий Черепанов пишет: А Вы в умном фильтре укажите укажите основной каталог!!!!!
а чтобы понять.... посмотрите какие свойства есть в карточке товара - потом перейдите в свойства инфоблока и посмотрите какие там свойства - может поймете!!!!
В свойствах инфоблока только "Характеристики", хотя если зайти в карточку товара, там характеристики разделены, почему же они не выводятся в умном фильтре так же раздельно
для умного фильтра есть только 1 свойство CML2_ATTRIBUTES (вроде того) умный фильтр остального не видит!
если срочно надо то делайте сами необходимые свойства и после выгрузки из 1с парсить характеристики и вбивать во свойства и выводить их в умном фильтре!!!!
AddEventHandler("catalog", "OnSuccessCatalogImport1C", "DSOnSuccessCatalogImport1C");
function DSOnSuccessCatalogImport1C(){
парсер характеристик и заношу в свойства
}
а кто говорил что я напишу рабочий код я ведь не знаю что конкретно за ситуация у вас.. я так примерно накидал что и как!!!!
Цитата
mortines пишет: Создаю свойство в торговом предложении, но туда ничего не заносится при обмене с 1с
возможно что Вы и не так что то делаете у меня есть такая же ситуация на одном их сайтов и все прекрасно работает! (только там я обрабатываю доп.картинки выгруженые из 1С)
а кто говорил что я напишу рабочий код я ведь не знаю что конкретно за ситуация у вас.. я так примерно накидал что и как!!!!
Цитата
mortines пишет: Создаю свойство в торговом предложении, но туда ничего не заносится при обмене с 1с
возможно что Вы и не так что то делаете у меня есть такая же ситуация на одном их сайтов и все прекрасно работает! (только там я обрабатываю доп.картинки выгруженые из 1С)
AddEventHandler("iblock", "OnBeforeIBlockElementUpdate", Array("EXT1C", "ATTRIBUTES2PROP"));
AddEventHandler("iblock", "OnAfterIBlockElementAdd", Array("EXT1C", "ATTRIBUTES2PROP"));
class EXT1C
{
function ATTRIBUTES2PROP(&$arFields)
{
if ((@$_REQUEST['type']=='catalog') && (@$_REQUEST['mode']=='import'))//выгрузка из 1С?
{
$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'];//название характеристики
if ($VALUE==0)
{
}
else
{
//проверяем, есть ли свойство с названием как в описание значения свойства в 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));
}
}
}
}
}
}