Очистка справочника Незарегистрированный покупатель по cron

Материал из Umicms
Версия от 09:59, 28 июня 2019; Alelekov (обсуждение | вклад) (Alelekov переименовал страницу Очистка справочника "Незарегистрированный покупатель" по cron в [[Очистка справочника Незарегистрированный…)
Перейти к:навигация, поиск

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

Задача

Проводить очистку справочника "Незарегистрированный покупатель" при запуске cron.
Задача очищения данного справочника актуальная для тех сайтов, количество посещений на которые достигает нескольких тысяч незарегистрированных пользователей в день, из-за чего данные в справочнике достигают больших объёмов, что сказывается на работе сайта.

Решение

В первую очередь, нам необходимо назначить обработчик события запуска cron в файле ~/classes/components/config/custom_events.php (если файла нет - необходимо создать его). Обработчик назначается таким образом:

<?php 
	new umiEventListener('cron', 'config', 'deleteUnregisteredCustomers');

Затем нам нужно описать функцию, которая будет очищать справочник. В файле ~/classes/components/config/customMacros.php создаём метод, который мы назначили на обработку события запуска cron. В нашем случае это метод deleteUnregisteredCustomers, выглядит он вот так:

public function deleteUnregisteredCustomers(iUmiEventPoint $e)
{
	if ($e->getMode() == 'process') {
		// Получить объекты справочника
		$unregisteredCustomersData = umiObjectsCollection::getInstance()->getGuidedItems(<здесь нужно указать идентификатор справочника>);
 
		// Массив содержит значения вида идентификатор => значение
		$ids = array_keys($unregisteredCustomersData);
		$objectsCollection = umiObjectsCollection::getInstance();
		// Проходимся по всем найденным объектам в справочнике "Незарегистрированный покупатель" и удаляем их
		// Тут можно настроить кол-во удаляемых за раз объектов, заменив foreach на for и указав ограничения
		foreach($ids as $id)
		{
			$objectsCollection->delObject($id);
		}
	}
}

Обратите внимание, что в методе необходимо указать идентификатор справочника "Незарегистрированный покупатель", а не какого-либо другого, иначе можно удалить другие, возможно, нужные Вам данные другого справочника. Идентификатор справочника Вы можете узнать, открыв справочник "Незарегистрированный покупатель" для просмотра и посмотрев последнее число в адресной строке. В нашем случае это число 88:

Screenshot 10.png

После всех этих действий справочник "Незарегистрированный покупатель" будет очищаться каждый раз по запуску cron.