Пользователь пока ничего не рассказал о себе

Наибольший вклад в теги

Все теги (4)

Лучшие ответы пользователя

Все ответы (15)
  • Почему битра отвечает "200 OK" на несуществующие в url-е section_code?

    @tgarl
    Потому что по умолчанию проверяется не весь путь, а только та часть которая отвечает за вывод или раздела или товара.
    В последних версиях настроек компонента есть галочка проверять весь путь(не помню как точно она обзывается) включите ее, тогда будет проверяться именно весь путь. Если такого нет, то придется вам самому делать такую проверку. Просто ЧПУ это правило подмены гет запроса вида 'RULE' => 'SECTION_CODE=$1&ELEMENT_CODE=$2',
    когда загружается раздел проверяется только SECTION_CODE=$1, когда товар только ELEMENT_CODE=$2 - одним словом это древняя тема которая тянется с первых версий существования битрикса.
    Ответ написан
  • Узнать купоны введенные пользователем в Bitrix?

    @tgarl
    Я список купонов перед заказом получаю так:
    $basket  = \Bitrix\Sale\Basket::loadItemsForFUser(
       \CSaleBasket::GetBasketUserID(),
        "s1" 
    );
     $order  = Bitrix\Sale\Order::create( "s1" , \Bitrix\Sale\Fuser::getId());
     $order ->setPersonTypeId( 1 );
     $order ->setBasket( $basket );
     $discounts  =  $order ->getDiscount();
     $res  =  $discounts ->getApplyResult();
     foreach($res['COUPON_LIST'] as $cupo_n=>$ar_r){
    ...
    тут проводим манипуляцую с купоном
    ...
    }

    Примерно как нужно я показал, дальше отталкивайтесь от своей задачи.
    Ответ написан
  • Как сделать акцию в битриксе 3 товара по цене 2?

    @tgarl Автор вопроса
    Приведу итоговое решение для того кто будет искать.
    Некоторые вещи нужно будеть немного адаптировать, но в целом вот решение:
    public static function OnBasketUpdateHandler($ID, $arItem)
        {
            global $USER;
    	if(!is_object($USER)){
    		$USER = new CUser();
    	}
    	$userId=$USER->GetID();
    	$strGroups = $USER->GetUserGroupString();
    	$arUserGroups = explode(',', $strGroups); 
    
    
        $productID = $arItem['PRODUCT_ID'];
        $quantity = $arItem['QUANTITY'];
    
    		
    	if ($userId=="81035" ){//Пока выводим только для меня
    		\Bitrix\Main\Loader::IncludeModule('iblock');
    		\Bitrix\Main\Loader::IncludeModule('catalog');
    		\Bitrix\Main\Loader::IncludeModule('sale');
    
    		$fuser=\Bitrix\Sale\Fuser::getId();
    		$basket = \Bitrix\Sale\Basket::loadItemsForFUser( $fuser, \Bitrix\Main\Context::getCurrent()->getSite() );
    		
    		$res=[];
    		$tovar=[];
    		foreach ($basket as $basketItem) {
    			if(!$basketItem->isDelay()){
    				$mxResult=[];
    				$aa = \CCatalogSku::GetProductInfo($basketItem->getProductId())['ID'];
    				$mxResult[$aa] = $aa;
    				\CIBlockElement::GetPropertyValuesArray($mxResult, 26, array(
    					'ID' => $mxResult,
    					'IBLOCK_ID' => 26,
    				));
    				$raschet='';
    				if(in_array($mxResult[$aa]['ROZNICHNAYA_SET']['VALUE_ENUM_ID'], [1753,1754]) && $mxResult[$aa]['RASPRODAZHA']['VALUE']=='true'){$raschet='raschet';}
    								
    				$basketPropertyCollection = $basketItem->getPropertyCollection(); 				
    				$res[]=[$basketItem->getProductId(),$basketItem->getPrice(), $basketItem->getQuantity(), $basketItem->getFinalPrice(), $basketPropertyCollection->getPropertyValues()['BAR_CODE']['VALUE'], $raschet];
    				$tovar[]=$basketPropertyCollection->getPropertyValues()['BAR_CODE']['VALUE'];
    					
    			}
    		}
    		
    		$coli=[];
    		$coli0=[];
    		foreach($res as $vl){
    			if($vl[5]=='raschet'){
    			for ($x=1; $x<=$vl[2]; $x++){
    				$coli[]=[$vl[0],$vl[1],$vl[5]];
    			}
    			}else{
    				$coli0[]=[$vl[0],$vl[1],$vl[5]];
    			}
    		}
    		$cont=count($coli);
    		usort($coli, function($a, $b){
    			return $a['1'] <=> $b['1'];
    		});
    		$skidka = floor($cont / 3);
    		for ($x=0; $x<$skidka; $x++){
    			$coli[$x][1]=0;
    		}
    		$coli = array_reverse($coli)+$coli0;
    		$arFilter = Array( "IBLOCK_ID"=>27, "PROPERTY_CML2_BAR_CODE"=>$tovar );
    		$res = \CIBlockElement::GetList(Array("SORT"=>"ASC",), $arFilter, false,false,array('ID',"PROPERTY_CML2_BAR_CODE",'CATALOG_QUANTITY','PROPERTY_CML2_LINK','IBLOCK_EXTERNAL_ID','XML_ID'));
    		$productsId=[];
    		$productsIdXml=[];
    		
    		while($ar_fields = $res->GetNext())
    		{
    			$productsId[$ar_fields["PROPERTY_CML2_BAR_CODE_VALUE"]]=$ar_fields['ID'];
    			$productsIdXml[$ar_fields["PROPERTY_CML2_BAR_CODE_VALUE"]]=['IBLOCK_EXTERNAL_ID'=>$ar_fields['IBLOCK_EXTERNAL_ID'],'XML_ID'=>$ar_fields['XML_ID']];
    			$productsIdXml2[$ar_fields["ID"]]=['IBLOCK_EXTERNAL_ID'=>$ar_fields['IBLOCK_EXTERNAL_ID'],'XML_ID'=>$ar_fields['XML_ID']];
    		}
    		$itogTovar=[];
    		
    		foreach($coli as $val){
    			$itogTovar[$val[0]][$val[1]]++;
    		}
    				
    		$itogo=[];	
    		foreach($itogTovar as $productID0=>$value){
    			$itogo[$productID0]['price']=0;
    			$itogo[$productID0]['quantity']=0;
    			$itogo[$productID0]['custom']='N';
    			foreach($value as $price0=>$qunt0){
    				if($price0>0){
    					$arPrice0 = \bh\catalog\tools::getPrc($productID0);
    					$itogo[$productID0]['price']=$itogo[$productID0]['price']+$arPrice0*$qunt0;
    					$itogo[$productID0]['quantity']=$itogo[$productID0]['quantity']+$qunt0;
    				}else{
    					$itogo[$productID0]['quantity']=$itogo[$productID0]['quantity']+$qunt0;
    					$itogo[$productID0]['custom']='Y';
    				}
    			}
    			$itogo[$productID0]['price']=floor($itogo[$productID0]['price']/$itogo[$productID0]['quantity']);
    		}
    		foreach ($basket as $basketItem) {
    			$id=$basketItem->getField('PRODUCT_ID');
    			if($itogo[$id]['custom']=='Y'){
    				$basketItem->setFields(array(
    						'CUSTOM_PRICE' => 'Y',
    						'PRICE' => $itogo[$id]['price'],
    						'CATALOG_XML_ID'=>$productsIdXml2[$id]['IBLOCK_EXTERNAL_ID'],
    						'PRODUCT_XML_ID'=>$productsIdXml2[$id]['XML_ID']
    					));
    				$basketItem->save();
    				$basketPropertyCollection = $basketItem->getPropertyCollection(); 
    				$basketPropertyCollection->setProperty(array(
    					'ACTION'=>array(
    					   'NAME' => 'Акция',
    					   'CODE' => 'ACTION',
    					   'VALUE' => 'Товар по акции 2=3',
    					   'SORT' => 1000,
    					),
    					'CATALOG_XML_ID'=>array(
    							'NAME' => 'Catalog XML_ID',
    							'CODE' => 'CATALOG.XML_ID',
    							'VALUE' => $productsIdXml2[$id]['IBLOCK_EXTERNAL_ID']
    						),
    					'PRODUCT_XML_ID'=>array(
    							"NAME" => "Product XML_ID",
    							"CODE" => "PRODUCT.XML_ID",
    							"VALUE" => $productsIdXml2[$id]['XML_ID']
    						)
    				));
    				$basketPropertyCollection->save();
    			}else{
    				$basketItem->setFields(array(
    						'CATALOG_XML_ID'=>$productsIdXml2[$id]['IBLOCK_EXTERNAL_ID'],
    						'PRODUCT_XML_ID'=>$productsIdXml2[$id]['XML_ID']
    					));
    				$basketItem->save();
    				$basketPropertyCollection = $basketItem->getPropertyCollection(); 
    				$basketPropertyCollection->setProperty(array(
    					'CATALOG_XML_ID'=>array(
    							'NAME' => 'Catalog XML_ID',
    							'CODE' => 'CATALOG.XML_ID',
    							'VALUE' => $productsIdXml2[$id]['IBLOCK_EXTERNAL_ID']
    						),
    					'PRODUCT_XML_ID'=>array(
    							"NAME" => "Product XML_ID",
    							"CODE" => "PRODUCT.XML_ID",
    							"VALUE" => $productsIdXml2[$id]['XML_ID']
    						)
    				));
    				$basketPropertyCollection->save();
    			}
    		}
    		
    	}
    		
        }
    Ответ написан

Лучшие вопросы пользователя

Все вопросы (7)