Очистка справочника Незарегистрированный покупатель по cron — различия между версиями
Alelekov (обсуждение | вклад) |
Alelekov (обсуждение | вклад) |
||
Строка 3: | Строка 3: | ||
== Задача == | == Задача == | ||
Проводить очистку справочника "Незарегистрированный покупатель" при запуске [http://dev.docs.umi-cms.ru/nastrojka_sistemy/cron/ cron]. | Проводить очистку справочника "Незарегистрированный покупатель" при запуске [http://dev.docs.umi-cms.ru/nastrojka_sistemy/cron/ cron]. | ||
+ | Задача очищения данного справочника актуальная для тех сайтов, количество посещений на которые достигает нескольких тысяч незарегистрированных пользователей в день, из-за чего данные в справочнике достигают больших объёмов, что сказывается на работе сайта. | ||
== Решение == | == Решение == |
Версия 08:31, 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:
После всех этих действий справочник "Незарегистрированный покупатель" будет очищаться каждый раз по запуску cron.