//Одна корзина на два сайта
//добавление товара в корзину
AddEventHandler("sale", "OnBeforeBasketAdd", "SyncBasketAdd");
function SyncBasketAdd(&$arFields)
{
if(SITE_ID == 's1'){
$other_site = 's2';
}elseif (SITE_ID == 's2') {
$other_site = 's1';
}
if($arFields['ID']){//если товар уже лежит в корзине
$arBasketItems = array();
$dbBasketItems = CSaleBasket::GetList(
array("NAME" => "ASC","ID" => "ASC"),
array("FUSER_ID" => CSaleBasket::GetBasketUserID(),
"LID" => SITE_ID,
"ORDER_ID" => "NULL"
),
false,
false,
array("ID", "MODULE", "NAME", "PRODUCT_ID", "QUANTITY", "PRICE", "LID")
);
while ($arItems = $dbBasketItems->Fetch())
{
$arBasketItems[] = $arItems; //корзина для текущего пользователя на текущем сайте
}
foreach ($arBasketItems as $key => $arBasketItem) {
if($arBasketItem['ID'] == $arFields['ID']){
$PRODUCT_ID = $arBasketItem['PRODUCT_ID'];
}
}
unset($dbBasketItems);
unset($arBasketItems);
$arBasketItems = array();
$dbBasketItems = CSaleBasket::GetList(
array("NAME" => "ASC","ID" => "ASC"),
array("FUSER_ID" => CSaleBasket::GetBasketUserID(),
"LID" => $other_site,
"ORDER_ID" => "NULL"
),
false,
false,
array("ID", "MODULE", "NAME", "PRODUCT_ID", "QUANTITY", "PRICE", "LID")
);
while ($arItems = $dbBasketItems->Fetch())
{
$arBasketItems[] = $arItems; //корзина для текущего пользователя на втором сайте
}
foreach ($arBasketItems as $key => $arBasketItem) {
if($arBasketItem['PRODUCT_ID'] == $PRODUCT_ID){
$qnt = $arBasketItem['QUANTITY'] + $arFields['QUANTITY'];
$arFields2 = array("QUANTITY" => $qnt, "LID" => $other_site);
CSaleBasket::Update($arBasketItem['ID'], $arFields2);
}
}
unset($dbBasketItems);
unset($arBasketItems);
}elseif($arFields['PRODUCT_ID']){//если товара еще нет в корзине
$arFields['LID'] = $other_site;
CSaleBasket::Add($arFields);
}
}
//изменение записей в корзине
AddEventHandler("sale", "OnBasketUpdate", "SyncBasketQnt");
function SyncBasketQnt($iId, $aFields)
{
if(SITE_ID == 's1'){
$other_site = 's2';
}elseif (SITE_ID == 's2') {
$other_site = 's1';
}
$arBasketItems1 = array();
$dbBasketItems = CSaleBasket::GetList(
array("NAME" => "ASC","ID" => "ASC"),
array("FUSER_ID" => CSaleBasket::GetBasketUserID(),
"LID" => SITE_ID,
"ORDER_ID" => "NULL"
),
false,
false,
array("ID", "MODULE", "NAME", "PRODUCT_ID", "QUANTITY", "PRICE", "LID")
);
while ($arItems = $dbBasketItems->Fetch())
{
$arBasketItems1[] = $arItems; //корзина для текущего пользователя на текущем сайте
}
foreach ($arBasketItems1 as $key => $arBasketItem) {
$PRODUCT_IDs[] = $arBasketItem['PRODUCT_ID'];
$PRODUCTS_QNT[] = $arBasketItem['QUANTITY'];
}
$arBasketItems2 = array();
$dbBasketItems = CSaleBasket::GetList(
array("NAME" => "ASC","ID" => "ASC"),
array("FUSER_ID" => CSaleBasket::GetBasketUserID(),
"LID" => $other_site,
"ORDER_ID" => "NULL"
),
false,
false,
array("ID", "MODULE", "NAME", "PRODUCT_ID", "QUANTITY", "PRICE", "LID")
);
while ($arItems = $dbBasketItems->Fetch())
{
$arBasketItems2[] = $arItems; //корзина для текущего пользователя на втором сайте
}
foreach ($arBasketItems2 as $key => $arBasketItem) {
$key2 = array_search($arBasketItem['PRODUCT_ID'], $PRODUCT_IDs);
$arFields2 = array("QUANTITY" => $PRODUCTS_QNT[$key2], "LID" => $other_site);
CSaleBasket::Update($arBasketItem['ID'], $arFields2);
}
}
//Удаление записей в корзине
AddEventHandler("sale", "OnBeforeBasketDelete", "SyncBasketDelete");
function SyncBasketDelete($iId)
{
if(SITE_ID == 's1'){
$other_site = 's2';
}elseif (SITE_ID == 's2') {
$other_site = 's1';
}
$arBasketItems = array();
$dbBasketItems = CSaleBasket::GetList(
array("NAME" => "ASC","ID" => "ASC"),
array("FUSER_ID" => CSaleBasket::GetBasketUserID(),
"LID" => SITE_ID,
"ORDER_ID" => "NULL"
),
false,
false,
array("ID", "MODULE", "NAME", "PRODUCT_ID", "QUANTITY", "PRICE", "LID")
);
while ($arItems = $dbBasketItems->Fetch())
{
$arBasketItems[] = $arItems; //корзина для текущего пользователя на текущем сайте
}
foreach ($arBasketItems as $key => $arBasketItem) {
if($arBasketItem['ID'] == $iId){
$PRODUCT_ID = $arBasketItem['PRODUCT_ID'];
}
}
unset($dbBasketItems);
unset($arBasketItems);
$arBasketItems = array();
$dbBasketItems = CSaleBasket::GetList(
array("NAME" => "ASC","ID" => "ASC"),
array("FUSER_ID" => CSaleBasket::GetBasketUserID(),
"LID" => $other_site,
"ORDER_ID" => "NULL"
),
false,
false,
array("ID", "MODULE", "NAME", "PRODUCT_ID", "QUANTITY", "PRICE", "LID")
);
while ($arItems = $dbBasketItems->Fetch())
{
$arBasketItems[] = $arItems; //корзина для текущего пользователя на втором сайте
}
foreach ($arBasketItems as $key => $arBasketItem) {
if($arBasketItem['PRODUCT_ID'] == $PRODUCT_ID){
CSaleBasket::Delete($arBasketItem['ID']);
}
}
unset($dbBasketItems);
unset($arBasketItems);
}
|