Удаление заказов по выборке средствами API и работы с объектами — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
 
(не показано 7 промежуточных версий 3 участников)
Строка 1: Строка 1:
 +
'''Актуально для версии 20'''
 +
 +
Перед работой с удалением заказов необходимо сделать полный дамп [http://wiki.umisoft.ru/%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BC%D0%BF%D0%B0_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%B4%D0%BB%D1%8F_%D0%BF%D0%B5%D1%80%D0%B5%D0%BD%D0%BE%D1%81%D0%B0_%D1%81%D0%B0%D0%B9%D1%82%D0%B0 базы данных.]
 +
 
Так как в административной панели удаление заказов возможно только вручную, при накоплении нескольких тысяч заказов,
 
Так как в административной панели удаление заказов возможно только вручную, при накоплении нескольких тысяч заказов,
 
их удаление будет проблематичным.
 
их удаление будет проблематичным.
  
 
В качестве примера, рассмотрим как произвести удаление всех заказов, сделанных ранее заданного года и месяца.
 
В качестве примера, рассмотрим как произвести удаление всех заказов, сделанных ранее заданного года и месяца.
Для этого необходимо написать следующий кастом, откроем ~\clases\modules\custom.php. и поместим в него код:
+
Для этого необходимо написать следующий кастом, откроем ~\clases\components\custom.php. и поместим в него код:
  
<source lang="php">public function delOrders($m=0,$y=0){
+
<source lang="php">public function delOrders($m = 0, $y = 0) {
                $orders = new selector('objects');
+
$orders = new selector('objects');
                $objectsCollection = umiObjectsCollection::getInstance();
+
$objectsCollection = umiObjectsCollection::getInstance();
                $orders->types('object-type')->name('emarket','order');
+
$orders->types('object-type')->name('emarket','order');
                foreach($orders as $order){
+
foreach ($orders as $order){
                    $date=$order->order_date;
+
$date = $order->order_date;
                    echo $order->id."<br />";
+
echo $order->id."<br />";
                    $parsDate=explode('-',$date);
+
$parsDate=explode('-', $date);
                    if(($parsDate[0]<$y)){
+
if ($parsDate[0] < $y){
                        $objectsCollection->delObject($order->id);
+
$objectsCollection->delObject($order->id);
                    }
+
}
                    if(($parsDate[1]<$m)){
+
if ($parsDate[1] < $m){
                        $objectsCollection->delObject($order->id);
+
$objectsCollection->delObject($order->id);
                    }
+
}
                    if((!$parsDate[0])&&(!$parsDate[1])){
+
if (( !$parsDate[0] && !$parsDate[1]){
                        $objectsCollection->delObject($order->id);
+
$objectsCollection->delObject($order->id);
                    }
+
}
                    }
+
}
                return "done";
+
return "done";
            }</source>
+
}</source>
  
 
где m и y это месяц и год соответственно.
 
где m и y это месяц и год соответственно.
Скрипт проверен на версии 2.8.5.3 20317.
 
  
 
[[Категория:Модуль Интернет магазин]]
 
[[Категория:Модуль Интернет магазин]]
[[Категория:Модуль Написание кастомных макросов]]
+
[[Категория:API]]

Текущая версия на 08:33, 30 апреля 2019

Актуально для версии 20

Перед работой с удалением заказов необходимо сделать полный дамп базы данных.

Так как в административной панели удаление заказов возможно только вручную, при накоплении нескольких тысяч заказов, их удаление будет проблематичным.

В качестве примера, рассмотрим как произвести удаление всех заказов, сделанных ранее заданного года и месяца. Для этого необходимо написать следующий кастом, откроем ~\clases\components\custom.php. и поместим в него код:

public function delOrders($m = 0, $y = 0) {
	$orders = new selector('objects');
	$objectsCollection = umiObjectsCollection::getInstance();
	$orders->types('object-type')->name('emarket','order');
	foreach ($orders as $order){
		$date = $order->order_date;
		echo $order->id."<br />";
		$parsDate=explode('-', $date);
		if ($parsDate[0] < $y){
			$objectsCollection->delObject($order->id);
		}
		if ($parsDate[1] < $m){
			$objectsCollection->delObject($order->id);
		}
		if (( !$parsDate[0] && !$parsDate[1]){
			$objectsCollection->delObject($order->id);
		}
	}
	return "done";
}

где m и y это месяц и год соответственно.