Работа с подписчиками средствами API UMI.CMS
Материал из Umicms
В некоторых случаях, когда очень много подписчиков, сложно выполнить однотипные операции для большого количества объектов, к примеру привязка все подписчиков к определенной рассылке. В статье рассмотрим два скрипта. Первый скрипт снимает привязку к рассылке для всех подписчиков:
<?php header("Content-type: text/html; charset=utf-8"); include "standalone.php"; // поиск подписчиков, которые потом будут отписаны от всех рассылок $subscribers = new selector('objects'); $subscribers->types('object-type')->name('dispatches', 'subscriber'); // подписчик должен быть подписан хотя бы на одну рассылку $subscribers->where('subscriber_dispatches')->isnull(); $subscribers->limit(0, 50); $total = $subscribers->length; foreach($subscribers as $subscribers){ $subscribers->setValue('subscriber_dispatches', array()); $subscribers->commit(); } if($total > 0){ echo 'Отписка от рассылок еще 50-ти подписчиков выполнена'; }else echo 'Отписка всех подписчиков выполнена'; ?>
создается файл, к примеру с названием set_null_dispath.php копируется в корень сайта и запускается. Второй скрипт привязывает всех подписчиков к указанным рассылкам:
// Рассылки, 324, 325 - object_id рассылок $dispatchs[] = 324; $dispatchs[] = 325;
<?php header("Content-type: text/html; charset=utf-8"); include "standalone.php"; $dispatchs = array(); // Рассылки, 324, 325 - object_id рассылок $dispatchs[] = 324; $dispatchs[] = 325; $objectTypes = umiObjectTypesCollection::getInstance(); $dispatchObjectTypeId = $objectTypes->getBaseType("dispatches", "dispatch"); $objects = umiObjectsCollection::getInstance(); $dispatchs_objects = array(); foreach($dispatchs as $dispatch_id){ $object_dispatch = $objects->getObject($dispatch_id); if($object_dispatch && $object_dispatch->getTypeId() == $dispatchObjectTypeId) $dispatchs_objects[] = $object_dispatch; } // поиск подписчиков, которые не подписаны ни на одну из рассылок $subscribers = new selector('objects'); $subscribers->types('object-type')->name('dispatches', 'subscriber'); $subscribers->where('subscriber_dispatches')->isnull(true); $subscribers->limit(0, 50); $total = $subscribers->length; foreach($subscribers as $subscribers){ $subscribers->setValue('subscriber_dispatches', $dispatchs_objects); $subscribers->commit(); } if($total > 0){ echo 'Подписаны следующие 50-ти подписчиков'; }else echo 'Выполнена подписка всех подписчиков'; ?>
