Работа с подписчиками средствами API UMI.CMS
Материал из Umicms
Версия от 13:40, 28 октября 2011; VITL' (обсуждение | вклад) (Новая страница: «В некоторых случаях, когда очень много подписчиков, сложно выполнить однотипные операции …»)
В некоторых случаях, когда очень много подписчиков, сложно выполнить однотипные операции для большого количества объектов, к примеру привязка все подписчиков к определенной рассылке. В статье рассмотрим два скрипта. Первый скрипт снимает привязку к рассылке для всех подписчиков:
<?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 'Выполнена подписка всех подписчиков';
?>