} else { $ID_tmp = CPrice::Add($arCatalogFields); $arUpdatedIDs[] = $ID_tmp; if (!$ID_tmp) { $strWarning .= str_replace("#PRICE#", $arCatalogFields["PRICE"], GetMessage("C2IT_ERROR_SAVEPRICE")) . "<br>"; } } } } foreach ($arCatalogPrices as $catalogGroupID => $arCatalogPrice_tmp) { $intCountPrice = count($arCatalogPrice_tmp); for ($i = 0; $i < $intCountPrice; $i++) { if (strlen($arCatalogPrice_tmp[$i]["PRICE"]) > 0) { $arCatalogFields = array("EXTRA_ID" => $arCatalogPrice_tmp[$i]["EXTRA_ID"] > 0 ? $arCatalogPrice_tmp[$i]["EXTRA_ID"] : false, "PRODUCT_ID" => $PRODUCT_ID, "CATALOG_GROUP_ID" => $catalogGroupID, "PRICE" => DoubleVal($arCatalogPrice_tmp[$i]["PRICE"]), "CURRENCY" => $arCatalogPrice_tmp[$i]["CURRENCY"], "QUANTITY_FROM" => $arCatalogPrice_tmp[$i]["QUANTITY_FROM"] > 0 ? $arCatalogPrice_tmp[$i]["QUANTITY_FROM"] : false, "QUANTITY_TO" => $arCatalogPrice_tmp[$i]["QUANTITY_TO"] > 0 ? $arCatalogPrice_tmp[$i]["QUANTITY_TO"] : false); if ($arCatalogPrice_tmp[$i]["ID"] > 0) { $arCatalogPrice = CPrice::GetByID($arCatalogPrice_tmp[$i]["ID"]); if ($arCatalogPrice && $arCatalogPrice["PRODUCT_ID"] == $PRODUCT_ID) { $arUpdatedIDs[] = $arCatalogPrice_tmp[$i]["ID"]; if (!CPrice::Update($arCatalogPrice_tmp[$i]["ID"], $arCatalogFields)) { $strWarning .= str_replace("#ID#", $arCatalogPrice_tmp[$i]["ID"], GetMessage("C2IT_ERROR_PRPARAMS")) . "<br>"; } } else { $ID_tmp = CPrice::Add($arCatalogFields); $arUpdatedIDs[] = $ID_tmp; if (!$ID_tmp) { $strWarning .= str_replace("#PRICE#", $arCatalogFields["PRICE"], GetMessage("C2IT_ERROR_SAVEPRICE")) . "<br>"; } } } else { $ID_tmp = CPrice::Add($arCatalogFields); $arUpdatedIDs[] = $ID_tmp;
<?php $arCountPricesCanAccess = 0; foreach ($arItem["PRICES"] as $key => $arPrice) { if ($arPrice["CAN_ACCESS"]) { $arCountPricesCanAccess++; } } ?> <?php foreach ($arItem["PRICES"] as $key => $arPrice) { ?> <?php if ($arPrice["CAN_ACCESS"]) { ?> <?php $price = CPrice::GetByID($arPrice["ID"]); ?> <?php if ($arCountPricesCanAccess > 1) { ?> <div class="price_name"><?php echo $price["CATALOG_GROUP_NAME"]; ?> </div><?php } ?> <span class="price"> <?php if ($arPrice["VALUE"] > $arPrice["DISCOUNT_VALUE"]) { ?>
function getDataForXml() { CModule::IncludeModule("iblock"); CModule::IncludeModule('catalog'); $filter["ACTIVE"] = "Y"; $filter["ACTIVE_DATE"] = "Y"; $filter["IBLOCK_ID"] = 2;//goodies $rsItems = CIBlockElement::GetList(array(), $filter, false, false, array()); $strOfferGoogle = ''; while ($obItem = $rsItems->GetNextElement()) { $arItem = $obItem->GetFields(); if (CModule::IncludeModule("catalog") && CCatalog::GetByID($arItem['IBLOCK_ID'])) { $arItem = $obItem->GetFields(); $productId = $arItem['ID']; $rsPrices = CPrice::GetByID($productId); $arItem['PROPERTIES'] = $obItem->GetProperties(); $strFile = ''; $arItem["DETAIL_PICTURE"] = (int)$arItem["DETAIL_PICTURE"]; $arItem["PREVIEW_PICTURE"] = (int)$arItem["PREVIEW_PICTURE"]; if ($arItem["DETAIL_PICTURE"] > 0 || $arItem["PREVIEW_PICTURE"] > 0) { $pictNo = ($arItem["DETAIL_PICTURE"] > 0 ? $arItem["DETAIL_PICTURE"] : $arItem["PREVIEW_PICTURE"]); if ($ar_file = CFile::GetFileArray($pictNo)) { if (substr($ar_file["SRC"], 0, 1) == "/") $strFile = "http://" . $_SERVER['SERVER_NAME'] . CHTTP::urnEncode($ar_file['SRC'], 'utf-8'); else $strFile = $ar_file["SRC"]; } } $arItem['google_PICT'] = $strFile; if (!empty($arItem["DETAIL_TEXT"])) $arItem['google_DESCR'] = google_text2xml(strip_tags(stristr($arItem["DETAIL_TEXT"], '.', true))); else $arItem['google_DESCR'] = google_text2xml(strip_tags($arItem["NAME"])); $strOfferGoogle .= "<item>\n"; $strOfferGoogle .= "<title>"; $strOfferGoogle .= $arItem['NAME']; $strOfferGoogle .= "</title>\n"; $strOfferGoogle .= "<link>"; $strOfferGoogle .= "http://".$_SERVER['SERVER_NAME'].$arItem['DETAIL_PAGE_URL']; $strOfferGoogle .= "</link>\n"; $strOfferGoogle .= "<description>"; $strOfferGoogle .= $arItem['google_DESCR']; $strOfferGoogle .= "</description>\n"; $strOfferGoogle .= "<g:image_link>"; $strOfferGoogle .= $strFile; $strOfferGoogle .= "</g:image_link>\n"; $strOfferGoogle .= "<g:price>"; $strOfferGoogle .= $rsPrices['PRICE']; $strOfferGoogle .= "</g:price>\n"; $strOfferGoogle .= "<g:condition>"; $strOfferGoogle .= "новый"; $strOfferGoogle .= "</g:condition>\n"; $strOfferGoogle .= "<g:id>"; $strOfferGoogle .= $arItem['CODE']; $strOfferGoogle .= "</g:id>\n"; $strOfferGoogle .= "</item>\n"; //etc etc } else { continue; } } writeData($strOfferGoogle); }
function Add2BasketByProductID($PRODUCT_ID, $QUANTITY = 1, $arRewriteFields = array(), $arProductParams = false) { global $APPLICATION; /* for old use */ if (false === $arProductParams) { $arProductParams = $arRewriteFields; $arRewriteFields = array(); } $PRODUCT_ID = IntVal($PRODUCT_ID); if ($PRODUCT_ID <= 0) { $APPLICATION->ThrowException(GetMessage('CATALOG_ERR_EMPTY_PRODUCT_ID'), "EMPTY_PRODUCT_ID"); return false; } $QUANTITY = DoubleVal($QUANTITY); if ($QUANTITY <= 0) { $QUANTITY = 1; } if (!CModule::IncludeModule("sale")) { $APPLICATION->ThrowException(GetMessage('CATALOG_ERR_NO_SALE_MODULE'), "NO_SALE_MODULE"); return false; } if (CModule::IncludeModule("statistic") && IntVal($_SESSION["SESS_SEARCHER_ID"]) > 0) { $APPLICATION->ThrowException(GetMessage('CATALOG_ERR_SESS_SEARCHER'), "SESS_SEARCHER"); return false; } $arProduct = CCatalogProduct::GetByID($PRODUCT_ID); if ($arProduct === false) { $APPLICATION->ThrowException(GetMessage('CATALOG_ERR_NO_PRODUCT'), "NO_PRODUCT"); return false; } $CALLBACK_FUNC = "CatalogBasketCallback"; $productProviderClass = "CCatalogProductProvider"; //ADD PRODUCT TO SUBSCRIBE if (isset($arRewriteFields["SUBSCRIBE"]) && $arRewriteFields["SUBSCRIBE"] == "Y") { global $USER; if ($USER->IsAuthorized() && !isset($_SESSION["NOTIFY_PRODUCT"][$USER->GetID()])) { $_SESSION["NOTIFY_PRODUCT"][$USER->GetID()] = array(); } $arBuyerGroups = CUser::GetUserGroup($USER->GetID()); $arPrice = CCatalogProduct::GetOptimalPrice($PRODUCT_ID, 1, $arBuyerGroups, "N", array(), SITE_ID, array()); $arCallbackPrice = array("PRICE" => $arPrice["DISCOUNT_PRICE"], "VAT_RATE" => 0, "CURRENCY" => CSaleLang::GetLangCurrency(SITE_ID), "QUANTITY" => 1); } else { $arRewriteFields["SUBSCRIBE"] = "N"; if ($arProduct["CAN_BUY_ZERO"] != 'Y' && $arProduct["QUANTITY_TRACE"] == "Y" && DoubleVal($arProduct["QUANTITY"]) <= 0) { $APPLICATION->ThrowException(GetMessage('CATALOG_ERR_PRODUCT_RUN_OUT'), "PRODUCT_RUN_OUT"); return false; } $arCallbackPrice = CSaleBasket::ReReadPrice($CALLBACK_FUNC, "catalog", $PRODUCT_ID, $QUANTITY, "N", $productProviderClass); if (!is_array($arCallbackPrice) || empty($arCallbackPrice)) { $APPLICATION->ThrowException(GetMessage('CATALOG_PRODUCT_PRICE_NOT_FOUND'), "NO_PRODUCT_PRICE"); return false; } } $dbIBlockElement = CIBlockElement::GetList(array(), array("ID" => $PRODUCT_ID, "ACTIVE" => "Y", "ACTIVE_DATE" => "Y", "CHECK_PERMISSIONS" => "Y", "MIN_PERMISSION" => "R"), false, false, array("ID", "IBLOCK_ID", "XML_ID", "NAME", "DETAIL_PAGE_URL")); $arIBlockElement = $dbIBlockElement->GetNext(); if ($arIBlockElement == false) { $APPLICATION->ThrowException(GetMessage('CATALOG_ERR_NO_IBLOCK_ELEMENT'), "NO_IBLOCK_ELEMENT"); return false; } $arProps = array(); $dbIBlock = CIBlock::GetList(array(), array("ID" => $arIBlockElement["IBLOCK_ID"])); if ($arIBlock = $dbIBlock->Fetch()) { $arProps[] = array("NAME" => "Catalog XML_ID", "CODE" => "CATALOG.XML_ID", "VALUE" => $arIBlock["XML_ID"]); } $arProps[] = array("NAME" => "Product XML_ID", "CODE" => "PRODUCT.XML_ID", "VALUE" => $arIBlockElement["XML_ID"]); $arPrice = CPrice::GetByID($arCallbackPrice["PRODUCT_PRICE_ID"]); $arFields = array("PRODUCT_ID" => $PRODUCT_ID, "PRODUCT_PRICE_ID" => $arCallbackPrice["PRODUCT_PRICE_ID"], "PRICE" => $arCallbackPrice["PRICE"], "CURRENCY" => $arCallbackPrice["CURRENCY"], "WEIGHT" => $arProduct["WEIGHT"], "QUANTITY" => $QUANTITY, "LID" => SITE_ID, "DELAY" => "N", "CAN_BUY" => "Y", "NAME" => $arIBlockElement["~NAME"], "MODULE" => "catalog", "PRODUCT_PROVIDER_CLASS" => "CCatalogProductProvider", "NOTES" => $arPrice["CATALOG_GROUP_NAME"], "DETAIL_PAGE_URL" => $arIBlockElement["DETAIL_PAGE_URL"], "CATALOG_XML_ID" => $arIBlock["XML_ID"], "PRODUCT_XML_ID" => $arIBlockElement["XML_ID"], "VAT_RATE" => $arCallbackPrice['VAT_RATE'], "SUBSCRIBE" => $arRewriteFields["SUBSCRIBE"]); if ($arProduct["CAN_BUY_ZERO"] != "Y" && $arProduct["QUANTITY_TRACE"] == "Y") { if (IntVal($arProduct["QUANTITY"]) - $QUANTITY < 0) { $arFields["QUANTITY"] = DoubleVal($arProduct["QUANTITY"]); } } if (is_array($arProductParams) && !empty($arProductParams)) { foreach ($arProductParams as &$arOneProductParams) { $arProps[] = array("NAME" => $arOneProductParams["NAME"], "CODE" => $arOneProductParams["CODE"], "VALUE" => $arOneProductParams["VALUE"], "SORT" => $arOneProductParams["SORT"]); } if (isset($arOneProductParams)) { unset($arOneProductParams); } } $arFields["PROPS"] = $arProps; if (is_array($arRewriteFields) && !empty($arRewriteFields)) { while (list($key, $value) = each($arRewriteFields)) { $arFields[$key] = $value; } } $addres = CSaleBasket::Add($arFields); if ($addres) { if (isset($arRewriteFields["SUBSCRIBE"]) && $arRewriteFields["SUBSCRIBE"] == "Y") { $_SESSION["NOTIFY_PRODUCT"][$USER->GetID()][$PRODUCT_ID] = $PRODUCT_ID; } if (CModule::IncludeModule("statistic")) { CStatistic::Set_Event("sale2basket", "catalog", $arFields["DETAIL_PAGE_URL"]); } } return $addres; }
/** * Добавление в корзину * аналогично системной функции Add2Basket за исключением использования кастомизированных функций обратного вызова * также в функции отключена статистика * * @param $PRICE_ID * @param $QUANTITY * @param $arRewriteFields * @param $arProductParams */ function Add2BasketCustom($PRICE_ID, $QUANTITY = 1, $arRewriteFields=array(), $arProductParams = array()) { $PRICE_ID = IntVal($PRICE_ID); if ($PRICE_ID<=0) return false; $QUANTITY = DoubleVal($QUANTITY); if ($QUANTITY<=0) $QUANTITY = 1; if (!CModule::IncludeModule("sale")) return false; $arPrice = CPrice::GetByID($PRICE_ID); if ($arPrice===false) return false; $arCatalogProduct = CCatalogProduct::GetByID($arPrice["PRODUCT_ID"]); if ($arCatalogProduct["QUANTITY_TRACE"]=="Y" && DoubleVal($arCatalogProduct["QUANTITY"])<=0) return false; // $arProduct = GetIBlockElement($arPrice["PRODUCT_ID"]); $dbIBlockElement = CIBlockElement::GetList( array(), array( "ID" => $arPrice["PRODUCT_ID"], "ACTIVE_DATE" => "Y", "ACTIVE" => "Y", "CHECK_PERMISSIONS" => "Y" ) ); $arProduct = $dbIBlockElement->GetNext(); $arProps = array(); $dbIBlock = CIBlock::GetList( array(), array("ID" => $arProduct["IBLOCK_ID"]) ); if ($arIBlock = $dbIBlock->Fetch()) { $arProps[] = array( "NAME" => "Catalog XML_ID", "CODE" => "CATALOG.XML_ID", "VALUE" => $arIBlock["XML_ID"] ); } $arProps[] = array( "NAME" => "Product XML_ID", "CODE" => "PRODUCT.XML_ID", "VALUE" => $arProduct["XML_ID"] ); $arFields = array( "PRODUCT_ID" => $arPrice["PRODUCT_ID"], "PRODUCT_PRICE_ID" => $PRICE_ID, "PRICE" => $arPrice["PRICE"], "CURRENCY" => $arPrice["CURRENCY"], "WEIGHT" => $arCatalogProduct["WEIGHT"], "QUANTITY" => $QUANTITY, "LID" => LANG, "DELAY" => "N", "CAN_BUY" => "Y", "NAME" => $arProduct["~NAME"], "CALLBACK_FUNC" => "CatalogBasketCustomCallback", "MODULE" => "catalog", "NOTES" => $arPrice["CATALOG_GROUP_NAME"], "ORDER_CALLBACK_FUNC" => "CatalogBasketOrderCustomCallback", "CANCEL_CALLBACK_FUNC" => "CatalogBasketCancelCallback", "PAY_CALLBACK_FUNC" => "CatalogPayOrderCallback", "DETAIL_PAGE_URL" => $arProduct["DETAIL_PAGE_URL"], "CATALOG_XML_ID" => $arIBlock["XML_ID"], "PRODUCT_XML_ID" => $arProduct["XML_ID"] ); if ($arCatalogProduct["QUANTITY_TRACE"]=="Y") { if (DoubleVal($arCatalogProduct["QUANTITY"])-$QUANTITY<0) $arFields["QUANTITY"] = DoubleVal($arCatalogProduct["QUANTITY"]); } if (is_array($arProductParams) && count($arProductParams) > 0) { for ($i = 0; $i < count($arProductParams); $i++) { $arProps[] = array( "NAME" => $arProductParams[$i]["NAME"], "CODE" => $arProductParams[$i]["CODE"], "VALUE" => $arProductParams[$i]["VALUE"] ); } } $arFields["PROPS"] = $arProps; if (is_array($arRewriteFields) && count($arRewriteFields)>0) { while(list($key, $value)=each($arRewriteFields)) $arFields[$key] = $value; } $addres = CSaleBasket::Add($arFields); return $addres; }