Также можете сюда привести весь кусок кода, может где-то очепятка..
16.07.2017 15:27:50
Также можете сюда привести весь кусок кода, может где-то очепятка..
|
|
|
|
16.07.2017 15:39:13
Весь код $imgFilePath = "/var/www/u0356043/data/www/mysite.ru/files/55_104106_rieker_5376600.jpg"; $IMG[]["VALUE"] = CFile::MakeFileArray($imgFilePath); $productID = 208942; $el = new CIBlockElement; $arLoadProductArray = Array( "DETAIL_PICTURE" => $IMG ); print_r($arLoadProductArray); здесь выводит следующее Array ( [DETAIL_PICTURE] => Array ( [0] => Array ( [VALUE] => Array ( [name] => 55_104106_rieker_5376600.jpg [size] => 52595 [tmp_name] => /var/www/u0356043/data/www/snomart.ru/files/55_104106_rieker_5376600.jpg [type] => image/jpeg ) ) ) ) $res = $el->Update($productID, $arLoadProductArray); if ($res) { echo "res " . $res; // здесь выводит res 1 } echo "Error: ".$el->LAST_ERROR; // здесь ничего не выводит $ar_res = CCatalogProduct::GetByIDEx($productID); print_r($ar_res); // здесь выводит все свойства и DETAIL_PICTURE пусто |
|||
|
|
16.07.2017 15:41:51
1 Записи 1 – 11 из 11 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
16.07.2017 15:42:52
DETAIL_PICTURE должен содержать только одно значение:
|
|||
|
|
16.07.2017 15:44:04
<? //Склоняем числительные инф. $int - число, $expressions - массив н.р. $expressions = Array("0"=>"программа", "1"=>"программы", "2"=>"программ") -->> function declensionOfWords($int, $expressions) { if (count($expressions) < 3) $expressions[2] = $expressions[1]; settype($int, "integer"); $count = $int % 100; if ($count >= 5 && $count <= 20) { $result = $expressions['2']; } else { $count = $count % 10; if ($count == 1) { $result = $expressions['0']; } elseif ($count >= 2 && $count <= 4) { $result = $expressions['1']; } else { $result = $expressions['2']; } } return $result; } // <<-- Склоняем числительные AddEventHandler('catalog', 'OnBeforePriceUpdate', "OnBeforePriceUpdateHandler"); function OnBeforePriceUpdateHandler($id, &$arFields) { CModule::IncludeModule("iblock"); $id_element_arfilds = $arFields["PRODUCT_ID"]; $price_new = $arFields["PRICE"]; if(!empty($id_element_arfilds) && !empty($price_new)){ $arSelect = Array("ID", "PROPERTY_CML2_LINK", "PROPERTY_CML2_LINK.PROPERTY_PRICE_SORT", "PROPERTY_PRICE_SORT"); $arFilter = Array("ACTIVE" =>"Y", "ID" => $id_element_arfilds); $res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect); $id_element = -1; while($ob = $res->GetNext()) { if(empty($ob["PROPERTY_CML2_LINK_VALUE"])){ if($ob["PROPERTY_PRICE_SORT_VALUE"] > $price_new || empty($ob["PROPERTY_PRICE_SORT_VALUE"])){ CIBlockElement::SetPropertyValuesEx( $id_element_arfilds, "", array("PRICE_SORT" => $price_new) ); } }elseif($ob["PROPERTY_CML2_LINK_PROPERTY_PRICE_SORT_VALUE"] > $price_new || empty($ob["PROPERTY_CML2_LINK_PROPERTY_PRICE_SORT_VALUE"])){ CIBlockElement::SetPropertyValuesEx( $ob["PROPERTY_CML2_LINK_VALUE"], "", array("PRICE_SORT" => $price_new) ); } } } } AddEventHandler('catalog', 'OnBeforePriceAdd', "OnBeforePriceAddHandler"); function OnBeforePriceAddHandler(&$arFields) { CModule::IncludeModule("iblock"); $id_element_arfilds = $arFields["PRODUCT_ID"]; $price_new = $arFields["PRICE"]; if(!empty($id_element_arfilds) && !empty($price_new)){ $arSelect = Array("ID", "PROPERTY_CML2_LINK", "PROPERTY_CML2_LINK.PROPERTY_PRICE_SORT", "PROPERTY_PRICE_SORT"); $arFilter = Array("ACTIVE" =>"Y", "ID" => $id_element_arfilds); $res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect); $id_element = -1; while($ob = $res->GetNext()) { if(empty($ob["PROPERTY_CML2_LINK_VALUE"])){ if($ob["PROPERTY_PRICE_SORT_VALUE"] > $price_new || empty($ob["PROPERTY_PRICE_SORT_VALUE"])){ CIBlockElement::SetPropertyValuesEx( $id_element_arfilds, "", array("PRICE_SORT" => $price_new) ); } }elseif($ob["PROPERTY_CML2_LINK_PROPERTY_PRICE_SORT_VALUE"] > $price_new || empty($ob["PROPERTY_CML2_LINK_PROPERTY_PRICE_SORT_VALUE"])){ CIBlockElement::SetPropertyValuesEx( $ob["PROPERTY_CML2_LINK_VALUE"], "", array("PRICE_SORT" => $price_new) ); } } } } AddEventHandler("catalog", "OnProductUpdate", "BXOnStoreProductUpdate"); AddEventHandler("catalog", "OnProductAdd", "BXOnStoreProductUpdate"); function BXOnStoreProductUpdate($ID, $arFields) { CModule::IncludeModule("iblock"); CModule::IncludeModule("catalog"); $id_element_arfilds = $ID; if(!empty($id_element_arfilds)){ $arSelect = array("ID", "PROPERTY_CML2_LINK", "PROPERTY_CML2_LINK.PROPERTY_PRICE_SORT", "PROPERTY_PRICE_SORT"); $arFilter = array("ACTIVE" =>"Y", "ID" => $id_element_arfilds); $res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect); $id_element = -1; while($ob = $res->GetNext()) { if(empty($ob["PROPERTY_CML2_LINK_VALUE"])){ //элемент $arSelect2 = array("ID"); $arFilter2 = array("ACTIVE" =>"Y", "PROPERTY_CML2_LINK" => $id_element_arfilds); $res2 = CIBlockElement::GetList(Array(), $arFilter2, false, false, $arSelect2); $ids_offers = array(); while($ob2 = $res2->GetNext()) { $ids_offers[] = $ob2["ID"]; } if(!empty($ids_offers)){ $db_res = CCatalogProduct::GetList( array("SORT" => "ASC"), array("ACTIVE" =>"Y", "ID" => $ids_offers), false, array() ); $count_zero = 0; while ($ar_res = $db_res->GetNext()) { if($ar_res["QUANTITY"] == 0){ $count_zero++; } } $status = "Y"; if($count_zero == count($ids_offers)){ $status = "N"; } CIBlockElement::SetPropertyValuesEx( $id_element_arfilds, "", array("NOTAVAILEBLE" => $status) ); }else{ //нет торговых предложений $db_res = CCatalogProduct::GetList( array("SORT" => "ASC"), array("ACTIVE" =>"Y", "ID" => $id_element_arfilds), false, array() ); $status = "Y"; if ($ar_res = $db_res->GetNext()) { if($ar_res["QUANTITY"] == 0){ $status = "N"; } } CIBlockElement::SetPropertyValuesEx( $id_element_arfilds, "", array("NOTAVAILEBLE" => $status) ); } }else{ //offers $id_element_arfilds = $ob["PROPERTY_CML2_LINK_VALUE"]; $arSelect2 = array("ID"); $arFilter2 = array("ACTIVE" =>"Y", "PROPERTY_CML2_LINK" => $id_element_arfilds); $res2 = CIBlockElement::GetList(Array(), $arFilter2, false, false, $arSelect2); $ids_offers = array(); while($ob2 = $res2->GetNext()) { $ids_offers[] = $ob2["ID"]; } if(!empty($ids_offers)){ $db_res = CCatalogProduct::GetList( array("SORT" => "ASC"), array("ACTIVE" =>"Y", "ID" => $ids_offers), false, array() ); $count_zero = 0; while ($ar_res = $db_res->GetNext()) { if($ar_res["QUANTITY"] == 0){ $count_zero++; } } $status = "Y"; if($count_zero == count($ids_offers)){ $status = "N"; } CIBlockElement::SetPropertyValuesEx( $id_element_arfilds, "", array("NOTAVAILEBLE" => $status) ); }else{ //нет торговых предложений $db_res = CCatalogProduct::GetList( array("SORT" => "ASC"), array("ACTIVE" =>"Y", "ID" => $id_element_arfilds), false, array() ); $status = "Y"; if ($ar_res = $db_res->GetNext()) { if($ar_res["QUANTITY"] == 0){ $status = "N"; } } CIBlockElement::SetPropertyValuesEx( $id_element_arfilds, "", array("NOTAVAILEBLE" => $status) ); } } } } } function dump($var, $die = false) { echo '<pre>'; print_r($var); echo '</pre>'; if ($die) die; } if(!function_exists("array_column")) { function array_column($array,$column_name, $column = '') { return array_map(function($element) use($column_name){return $element[$column_name];}, $array); } } |
|||
|
|
16.07.2017 15:52:17
Я просто использовал старый код загрузки фото, if ($elImg["OTHER"]) { foreach ($elImg["OTHER"] as $ImgEl) { $IMG[]["VALUE"] = CFile::MakeFileArray($ImgEl); $logVar = "Загружены дополнительные изображения."; } CIBlockElement::SetPropertyValuesEx($arEl["ID"], $BID, array("OTHER_PHOTO" => $IMG)); } else { $logVar = "Дополнительные изображения отсутсвуют (или в рамках текущей логики не найдены)."; } if ($elImg["FIRST"]) { foreach ($elImg["FIRST"] as $ImgEl) { echo $ImgEl; $IMG_O[]["VALUE"] = CFile::MakeFileArray($ImgEl); $logVar .= " Загруженно основное изображение."; } CIBlockElement::SetPropertyValuesEx($arEl["ID"], $BID, array("MAIN_PHOTO" => $IMG_O)); } else { $logVar .= " Основное изображение отсутсвует (или в рамках текущей логики не найдено)."; } Мне надо было вместо MAIN_PHOTO загрузить в DETAIL_PICTURE, и не обратил внимание что передаю массив. Можете еще помочь с вопросом, раз уж теперь в DETAIL_PICTURE записывается фото, почему метод Update обнуляет все свойства товара? Я вручную их не могу проставить, придется из 1С выгружать заново. |
|||||
|
|
16.07.2017 16:01:28
Если не передаете в массиве PROPERTY_VALUES, то сбрасываться не должны. Возможно, модуль sns.tools1c мешает. Подозрительный в этом плане обработчик OnAfterIBlockElementUpdate.
|
||||
|
|
|||