Постараюсь все описать максимально доходчиво и как можно короче.
Ситуация в следущем: Необходимо выводить разные топы товаров по разным свойствам.
Сделано в 1С: в номенклатуре введены свойства для каждого товара - Новинка, Лидер продаж, Спецпредложение, со значением "Y" (либо значение полностью отсутствует).
Сделано в битриксе: при синхронизации 1С и битрикса (выгрузке) в товарах, если в свойстве товара присутствует значение "Y", то в файле импорта оно присутствует, попадает в каталог битрикса, прописывается в том же свойстве у необходимого товара, работают топы, фильтры и т.д. все хорошо.
При синхронизации 1С выгружает эти свойства в виде строки и переделка их в битриксе под "флаги" при первой же новой синхронизации слетает, появляются дубликаты от 1С опять со строковыми значениями.
Проблема заключается в следующем! - со строками у меня везде все получается - фильтрую по ним, ввожу для товара различные добавления основываясь на этих свойствах кроме одного: после того как в 1С свойство меняется (т.е. значение "Y" удаляется и остается пустота) сама 1С эти свойства уже не выгружает, победить это в самой 1С в обработке выгрузки на сайт не получается. а поскольку изменения на сайт не долетают, то на сайте начинается бардак, да и строки не могут работать как флаги, например в топах при выводе товаров по FLAG_PROPERTY_CODE. есть вариант добавить в 1С дополнительное значение "N", но тогда для фильтров будет одинаково, что Y, что N, т.к.
Код |
---|
<?if (array_key_exists("PROPERTIES", $arResult) && is_array($arResult["PROPERTIES"]))
{
$sticker = "";
foreach (Array("SPECIALOFFER", "NEWPRODUCT", "SALELEADER") as $propertyCode)
{
if (array_key_exists($propertyCode, $arResult["PROPERTIES"]) && intval($arResult["PROPERTIES"][$propertyCode]["PROPERTY_VALUE_ID"]) > 0)
$sticker .= $arResult["PROPERTIES"][$propertyCode]["CODE"];
}
}
?> |
это тоже можно победить, если сделать так:
Код |
---|
<?if (array_key_exists("PROPERTIES", $arResult) && is_array($arResult["PROPERTIES"]))
{
$sticker = "";
foreach (Array("SPECIALOFFER", "NEWPRODUCT", "SALELEADER") as $propertyCode)
{
if (array_key_exists($propertyCode, $arResult["PROPERTIES"]) && ($arResult["PROPERTIES"][$propertyCode]["VALUE"]) == "Y")
$sticker .= $arResult["PROPERTIES"][$propertyCode]["CODE"];
}
}
?> |
но вот как победить работу фильтра в компоненте топа по флагу?????
Код |
---|
if ($arParams['FLAG_PROPERTY_CODE'])
{
$arrFilter['!PROPERTY_'.$arParams['FLAG_PROPERTY_CODE']] = false;
} |
Прошу помощи, как разрулить такую вот проблемку...