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

Материал из Umicms
Перейти к:навигация, поиск
Строка 13: Строка 13:
 
</source>
 
</source>
  
Затем нам нужно описать функцию, которая будет очищать справочник. В файле ~/classes/components/config/customMacros.php создаём функцию, которую мы назначили на обработку события запуска cron. В нашем случае это функция deleteUnregisteredCustomers, выглядит она вот так:
+
Затем нам нужно описать функцию, которая будет очищать справочник. В файле ~/classes/components/config/customMacros.php создаём метод, который мы назначили на обработку события запуска cron. В нашем случае это метод deleteUnregisteredCustomers, выглядит он вот так:
 
<source lang="php">
 
<source lang="php">
 
public function deleteUnregisteredCustomers(iUmiEventPoint $e)
 
public function deleteUnregisteredCustomers(iUmiEventPoint $e)

Версия 08:41, 24 мая 2019

Актуально для версии 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.