[УПУЩЕННОЕ] Настраиваем расчёт скидки в minishop2 версии 2.7.0 и выше

Приветствую, как-то так случилось, что я упустил вот этот релиз, и тут понадобилось мне сделать возможность устанавливать скидку на каждый товар, начал я писать плагин и увидел в объекте корзине два ранее не встречавшихся ключа discount_price и discount_cost, связался с @Иван Бочкарев, он меня и просветил, что расчёт скидки уже внедрён, надо только указать старую цену и всё посчитается. Это круто, но зачастую удобнее указать скидку в % от цены или просто числом, поэтому я написал небольшой плагин, который при сохранении товара рассчитывает новую цену, а старую записывает в поле old_price, если же скидка равна 0 или не указана и поле old_price заполнено, то его содержимое переносится в price, а old_price обнуляем. Уверен, что многие сами могут такой плагин написать, но кому-то возможно захочется сэкономить 5 минут, код под катом.

<?php
switch ($modx->event->name) {
    case 'OnDocFormSave': 
    	if($resource->get('class_key') == 'msProduct'){
    		$product = $modx->getObject('msProduct', $id);
	    	$discount = $product->get('discount');
	    	$price =  $product->get('price');
	    	$old_price = $product->get('old_price');
	    	
	    	if($discount && !$old_price){
	    		if(preg_match('/.*%.*/', $discount)){
	    			$sale = (int)$discount;
					$new_price = $price - $price * $sale / 100;
	    		}
	    		else{
	    			$sale = (int)$discount;
					$new_price = $price - $sale;
	    		}
	    		
	    		$old_price = $price;
	    		$price = $new_price;
	    	}
	    	elseif (!$discount && $old_price){
	    		$price = $old_price;
	    		$old_price = 0;
	    	}
	    	else{
	    		$sale = (int)$discount;
	    		$new_price = $old_price - $old_price * $sale / 100;
	    		if($new_price != $price){
	    			$price = $new_price;
	    		}
	    	}
	    	
	    	$product->set('price', $price);
	    	$product->set('old_price', $old_price);
	    	$product->set('discount', $discount);
	    	$product->save();
    	}

    	break; 
}
Артур
05 февраля 2021, 23:51
modx.pro
3
416
+3
Поблагодарить автора Отправить деньги

Комментарии: 0

Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
0