<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wiki.umisoft.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Polina</id>
	<title>Umicms - Вклад участника [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.umisoft.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Polina"/>
	<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Polina"/>
	<updated>2026-05-21T21:09:16Z</updated>
	<subtitle>Вклад участника</subtitle>
	<generator>MediaWiki 1.31.0</generator>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%9E%D1%87%D0%B8%D1%81%D1%82%D0%BA%D0%B0_%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%87%D0%BD%D0%B8%D0%BA%D0%B0_%D0%9D%D0%B5%D0%B7%D0%B0%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BF%D0%BE%D0%BA%D1%83%D0%BF%D0%B0%D1%82%D0%B5%D0%BB%D1%8C_%D0%BF%D0%BE_cron&amp;diff=9388</id>
		<title>Очистка справочника Незарегистрированный покупатель по cron</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%9E%D1%87%D0%B8%D1%81%D1%82%D0%BA%D0%B0_%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%87%D0%BD%D0%B8%D0%BA%D0%B0_%D0%9D%D0%B5%D0%B7%D0%B0%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BF%D0%BE%D0%BA%D1%83%D0%BF%D0%B0%D1%82%D0%B5%D0%BB%D1%8C_%D0%BF%D0%BE_cron&amp;diff=9388"/>
		<updated>2019-12-27T15:12:04Z</updated>

		<summary type="html">&lt;p&gt;Polina: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Актуально для версии 20&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Задача ==&lt;br /&gt;
Проводить очистку справочника &amp;quot;Незарегистрированный покупатель&amp;quot; при запуске [http://dev.docs.umi-cms.ru/nastrojka_sistemy/cron/ cron].&amp;lt;br/&amp;gt;&lt;br /&gt;
Задача очищения данного справочника актуальная для тех сайтов, количество посещений на которые достигает нескольких тысяч незарегистрированных пользователей в день, из-за чего данные в справочнике достигают больших объёмов, что сказывается на работе сайта.&lt;br /&gt;
&lt;br /&gt;
== Решение ==&lt;br /&gt;
&lt;br /&gt;
В первую очередь, нам необходимо назначить обработчик события запуска cron в файле ~/classes/components/config/custom_events.php (если файла нет - необходимо создать его). Обработчик назначается таким образом:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php &lt;br /&gt;
	new umiEventListener(&amp;#039;cron&amp;#039;, &amp;#039;config&amp;#039;, &amp;#039;deleteUnregisteredCustomers&amp;#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Затем нам нужно описать функцию, которая будет очищать справочник. В файле ~/classes/components/config/customMacros.php создаём метод, который мы назначили на обработку события запуска cron. В нашем случае это метод deleteUnregisteredCustomers, выглядит он вот так:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function deleteUnregisteredCustomers(iUmiEventPoint $e)&lt;br /&gt;
{&lt;br /&gt;
	if ($e-&amp;gt;getMode() == &amp;#039;process&amp;#039;) {&lt;br /&gt;
		// Получить объекты справочника&lt;br /&gt;
		$unregisteredCustomersData = umiObjectsCollection::getInstance()-&amp;gt;getGuidedItems(&amp;lt;здесь нужно указать идентификатор справочника&amp;gt;);&lt;br /&gt;
 &lt;br /&gt;
		// Массив содержит значения вида идентификатор =&amp;gt; значение&lt;br /&gt;
		$ids = array_keys($unregisteredCustomersData);&lt;br /&gt;
		$objectsCollection = umiObjectsCollection::getInstance();&lt;br /&gt;
		// Проходимся по всем найденным объектам в справочнике &amp;quot;Незарегистрированный покупатель&amp;quot; и удаляем их&lt;br /&gt;
		// Тут можно настроить кол-во удаляемых за раз объектов, заменив foreach на for и указав ограничения&lt;br /&gt;
		foreach($ids as $id)&lt;br /&gt;
		{&lt;br /&gt;
			$objectsCollection-&amp;gt;delObject($id);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обратите внимание, что в методе необходимо указать идентификатор справочника &amp;quot;Незарегистрированный покупатель&amp;quot;, а не какого-либо другого, иначе можно удалить другие, возможно, нужные Вам данные другого справочника. Идентификатор справочника Вы можете узнать, открыв справочник &amp;quot;Незарегистрированный покупатель&amp;quot; для просмотра и посмотрев последнее число в адресной строке. В нашем случае это число 88:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Screenshot_10.png]]&lt;br /&gt;
&lt;br /&gt;
После всех этих действий справочник &amp;quot;Незарегистрированный покупатель&amp;quot; будет очищаться каждый раз по запуску cron. &lt;br /&gt;
&lt;br /&gt;
== Исключение незарегистрированных пользователей, совершивших настоящие заказы ==&lt;br /&gt;
&lt;br /&gt;
При очистке справочника будут удалены все данные о незарегистрированных покупателях, в том числе контактные данные из карточек заказов, оставленных неавторизованными пользователями.&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы удалить только тех незарегистрированных пользователей, которые не указали свои контактные данные, мы можем добавить после &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
foreach($ids as $id)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
следующие исключающие переменные:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$obj = $objectsCollection-&amp;gt;getObject($id);&lt;br /&gt;
        $fname = $obj-&amp;gt;getPropByName(&amp;#039;fname&amp;#039;)-&amp;gt;getValue(); &lt;br /&gt;
        $lname = $obj-&amp;gt;getPropByName(&amp;#039;lname&amp;#039;)-&amp;gt;getValue();&lt;br /&gt;
        $email = $obj-&amp;gt;getPropByName(&amp;#039;email&amp;#039;)-&amp;gt;getValue();&lt;br /&gt;
        $phone = $obj-&amp;gt;getPropByName(&amp;#039;phone&amp;#039;)-&amp;gt;getValue();&lt;br /&gt;
        if (!isset($fname) &amp;amp;&amp;amp; !isset($lname) &amp;amp;&amp;amp; !isset($email) &amp;amp;&amp;amp; !isset($phone)) {&lt;br /&gt;
$objectsCollection-&amp;gt;delObject($id);&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, будут удалены только те незарегистрированные покупатели, которые не указали контактные данные — имя, фамилию, электронную почту и телефон.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [[category:Написание кастомных макросов]]&lt;/div&gt;</summary>
		<author><name>Polina</name></author>
		
	</entry>
</feed>