Опубликовано: 13 сентября 200718 г Имя файла: 2.3.x: Управление подпискамиВладелец файла: Доктор ФреддиФайл размещен: 13 Сен 2007Файл обновлен: 31 Авг 2011Категория файла: Mods/Моды Компонент админ-панели, позволяющий управлять подписками пользователей на темы и форумы — добавлять новые и удалять существующие. Присутствует система поиска подписок. Нажмите сюда, чтобы скачать этот файл Изменено 31 января 201510 г пользователем Доктор Фредди
Опубликовано: 11 мая 200916 г Автор После чего иду в форум подписанный на рассылку и оставляю в нем сообщениеПодписка на форум — подписка на новые темы в нём, а не на сообщения в темах. О чем прямым текстом сказано в интерфейсе подписки: При подписке на форум вы будете уведомлены обо всех новых темах в этом форуме, а при подписке на тему получите уведомления уже о всех новых сообщениях в этой теме. По алгоритму, который вы описали, прошелся на тестовом форуме — работает, письмо приходит. Если создать в подписанном форуме тему, я имею в виду. Если оставить сообщение — письмо придет, только если вы подписаны на тему, в которой оставлено сообщение.
Опубликовано: 11 мая 200916 г Всё понятно, подписал всех только на создание тем. Но тем не создаём и письма не приходят.Для рассылки писем при новых сообщениях нужно делать через МОД пункт "Введите идентификатор темыУкажите идентификатор темы, для которой будет создана подписка". Я правильно понимаю? Тогда будет каждому пользователю приходить сообщение о новом сообщении, так? Сразу вопрос: А если у меня на форуме этих тем 1500, как быть в этом случае. Я же не буду сидеть и все 1500 прописывать через мод. Как быть, что бы всех пользователей по умолчанию подписать на новые сообщения? Введите идентификатор темы Укажите идентификатор темы, для которой будет создана подписка.Что в данном случаем является идентификатором темы? Адрес в браузере? Так он для каждой страницы темы разный... Может можно указать сразу все темы?
Опубликовано: 11 мая 200916 г Автор Идентификатор темы — целое неотрицательное цисло, идентифицирующее тему в соответствующей таблице базы данных. Например, в ссылке: http://forum.ru/index.php?showtopic=18306 Идентификатором является число 18306. Подписывать сразу на все темы мод не умеет и форум, кстати, тоже. Можно решить модификацией кода форума, но с ростом форума процессы отправки сообщений почты начнут просто падать при отправке из-за огромного количества e-mail'ов.
Опубликовано: 11 мая 200916 г Идентификатор темы — целое неотрицательное цисло, идентифицирующее тему в соответствующей таблице базы данных. Например, в ссылке: http://forum.ru/index.php?showtopic=18306 Идентификатором является число 18306.Да, это я уже вкурил сам. Полюбому спасибо! Подписывать сразу на все темы мод не умеет и форум, кстати, тоже. Можно решить модификацией кода форума, но с ростом форума процессы отправки сообщений почты начнут просто падать при отправке из-за огромного количества e-mail'ов. Сейчас проверил подписку по идентификатору темы, ВСЁ РАБОТАЕТ!Но мороки много для того, что бы всех и вся подписать на каждую тему. Я не планирую огромного развития форума, он сделан для ограниченного количества пользователей.А как и где модифицировать код форума? Изменено 11 мая 200916 г пользователем Fisana
Опубликовано: 11 мая 200916 г И еще вопросик: Если я создаю рассылку по теме на определенную группу пользователей сегодня, а завтра к этой группе добавились еще пору пользователей, то эти пользователи не будут в списке рассылок? Или они добавятся ресурсами форума в рассылку как причастные к данной группе пользователей? Как в этой ситуации?
Опубликовано: 12 мая 200916 г Автор Если я создаю рассылку по теме на определенную группу пользователей сегодня, а завтра к этой группе добавились еще пору пользователей, то эти пользователи не будут в списке рассылок?Нет. Группу подписать нельзя. Мод просто выгребает всех пользователей группы и создает для них персональные подписки. Для ваших целей можно воспользоваться настройкой в админ-панели, позволяющей автоматически подписывать выбранные группы пользователей на все новые темы. Точное название не помню, находится в разделе настроек тем и сообщений. Чтобы настроить всеобщее уведомление о каждом сообщении, нужно модифицировать класс создания этих сообщений, найти кусок, в котором производится поиск подписок и заменить его на получение всех e-mail'ов зарегистрированных пользователей с последующей отправкой.
Опубликовано: 12 мая 200916 г Чтобы настроить всеобщее уведомление о каждом сообщении, нужно модифицировать класс создания этих сообщений, найти кусок, в котором производится поиск подписок и заменить его на получение всех e-mail'ов зарегистрированных пользователей с последующей отправкой.СПАСИБО! Теоретически я понимаю как это сделать, а вот практически не очень, не силен я в кодах модифицирования. Поправить, смодифицировать, прописать я смогу, а вот самому придумать код не вариант.Гуру, помогите...
Опубликовано: 12 мая 200916 г Автор /sources/classes/post/class_post.php Находим функцию topic_tracker, в ней — конструкцию: $topic = $this->ipsclass->DB->simple_exec_query( array( 'select' => 'tid, forum_id, title', 'from' => 'topics', 'where' => 'tid = '. $tid ) ); $this->ipsclass->DB->simple_construct( array( 'select' => 'id, email, language, email_full, members_display_name', 'from' => 'members', 'where' => 'id <> ' . $this->ipsclass->member['id'] ) ); $this->ipsclass->DB->simple_exec(); $this->ipsclass->DB->simple_exec(); $send_to = array(); while ( $row = $this->ipsclass->DB->fetch_row() ) { $send_to[] = $row; } if ( ! count( $send_to ) ) return true; foreach ( $send_to as $member ) { $mail = array( 'TOPIC_ID' => $topic['tid'], 'FORUM_ID' => $topic['forum_id'], 'TITLE' => $topic['title'], 'NAME' => $member['members_display_name'], 'POSTER' => $poster ); if ( $member['email_full'] ) { $mail['POST'] = $post; $this->email->get_template( 'subs_with_post', $member['language'] ); $this->email->build_message( $mail ); } else { $this->email->get_template( 'subs_no_post', $member['language'] ); $this->email->build_message( $mail ); } $this->ipsclass->DB->do_insert( 'mail_queue', array( 'mail_to' => $member['email'], 'mail_date' => time(), 'mail_subject' => $this->email->lang_subject, 'mail_content' => $this->email->message ) ); } $this->ipsclass->cache['systemvars']['mail_queue'] += count( $send_to ); $this->ipsclass->update_cache( array( 'array' => 1, 'name' => 'systemvars', 'donow' => 1, 'deletefirst' => 0 ) ); return true; Тестировал весьма условно (на раз прогнал), так что проверяйте. Обратите также внимание, что предел отправленных за раз писем — 20 штук, остальные отправятся в ходе следующих сессий.
Опубликовано: 12 мая 200916 г Обратите также внимание, что предел отправленных за раз писем — 20 штук, остальные отправятся в ходе следующих сессий.Спасибо! Буду тестить, по результатам отпишу.А какова цикличность сессий? Через какое время последует следующая двадцатка и так до полного отправления рассылки?
Опубликовано: 12 мая 200916 г Автор Обработка очереди писем идет при каждой загрузке форума. Я, кстати, ошибся — в стандартной сборке отправляется не 20, а пять писем. Больше, в принципе, не требуется с точки зрения устойчивости работы. Если нужно изменить и вы уверены, что сервер справится с этим, можно создать в настройках параметр mail_queue_per_blob, равный желаемому количеству отправляемых писем. Не забудьте включить флаг кэша при создании. Или можно модифицировать скрипт — sources/ipsclass.php, функция process_mail_queue(). Строчка: $this->vars['mail_queue_per_blob'] = isset($this->vars['mail_queue_per_blob']) ? $this->vars['mail_queue_per_blob'] : 5; Нам нужна последняя цифра, меняем 5 на нужное число или заменяем всю строчку на: $this->vars['mail_queue_per_blob'] = 25; То есть, двадцать пять писем за раз.
Опубликовано: 12 мая 200916 г Если нужно изменить и вы уверены, что сервер справится с этим, можно создать в настройках параметр mail_queue_per_blob, равный желаемому количеству отправляемых писем. Не забудьте включить флаг кэша при создании.А как проверить справляется ли сервер с отправкой? Где можно будет смотреть статистику и возможно ли это? Я планирую поставить цифру 1000.
Опубликовано: 13 мая 200916 г Автор Да ставьте хоть миллион, все равно при таких цифрах увеличение посещаемости форума будет давать непрерывные сбои. Смотреть логи соответствующей задачи в админке (зачеркнута в списке, активируется самим форумом при необходимости).
Опубликовано: 16 мая 200916 г Всё сделал, добавил код, поставил цифру 500, все работает в данный момент прекрасно, но пару деньков понаблюдаю и отпишу результат. Доктор Фредди, БОЛЬШОЕ СПАСИБО!
Опубликовано: 18 мая 200916 г Всё работает прекрасно, даже очень! Завалил всех письмами выше крыши.Есть несколько вопросов:1. Как пользователь может отключиться от такой рассылки? Только через запрет получения писем от администрации или есть другой способ? Но в личных данных при такой конфигурации отключить ничего нельзя!2. На каждое сообщение отправляется сообщение, даже если пользователь не заходил на форум несколько дней, его засыпет письмами по одной и той же теме. Хотя должно быть одно письмо до момента его появления в теме, а после снова, но не когда он не заходит, а его засыпает одним и темже сообщением.Как поправить, что бы по теме приходило всего одно письмо? А так все прекрасно. Спасибо!
Опубликовано: 19 мая 200916 г Автор Хорошая новость: отписаться может обычным способом, через центр управления.Плохая новость: админ может подписать его обратно. Хорошая новость: обозленный горой писем юзер может запретить уведомления вообще. Плохая новость... Да нет, это всё. Контроль отправки сделать можно, но мне сейчас некогда. Может, кто-нибудь из коллег заинтересуется — весь нужный код есть ниже в функции, нужно просто продублировать / адаптировать нужные участки.
Имя файла: 2.3.x: Управление подписками
Владелец файла: Доктор Фредди
Файл размещен: 13 Сен 2007
Файл обновлен: 31 Авг 2011
Категория файла: Mods/Моды
Компонент админ-панели, позволяющий управлять подписками пользователей на темы и форумы — добавлять новые и удалять существующие. Присутствует система поиска подписок.
Нажмите сюда, чтобы скачать этот файл
Изменено пользователем Доктор Фредди