Перейти к публикации
View in the app

A better way to browse. Learn more.

Дизайн и модификация Invision Community

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

2.3.x: Управление подписками

Опубликовано:

index.php?app=downloads&module=display&section=screenshot&id=133

Имя файла: 2.3.x: Управление подписками

Владелец файла: Доктор Фредди

Файл размещен: 13 Сен 2007

Файл обновлен: 31 Авг 2011

Категория файла: Mods/Моды

 

Компонент админ-панели, позволяющий управлять подписками пользователей на темы и форумы — добавлять новые и удалять существующие. Присутствует система поиска подписок.

 

Нажмите сюда, чтобы скачать этот файл

Изменено пользователем Доктор Фредди

Рекомендованные сообщения

Опубликовано:
  • Автор
После чего иду в форум подписанный на рассылку и оставляю в нем сообщение
Подписка на форум — подписка на новые темы в нём, а не на сообщения в темах. О чем прямым текстом сказано в интерфейсе подписки:

 

При подписке на форум вы будете уведомлены обо всех новых темах в этом форуме, а при подписке на тему получите уведомления уже о всех новых сообщениях в этой теме.

 

По алгоритму, который вы описали, прошелся на тестовом форуме — работает, письмо приходит. Если создать в подписанном форуме тему, я имею в виду. Если оставить сообщение — письмо придет, только если вы подписаны на тему, в которой оставлено сообщение.

Опубликовано:

Всё понятно, подписал всех только на создание тем. Но тем не создаём и письма не приходят.

Для рассылки писем при новых сообщениях нужно делать через МОД пункт "Введите идентификатор темы

Укажите идентификатор темы, для которой будет создана подписка". Я правильно понимаю? Тогда будет каждому пользователю приходить сообщение о новом сообщении, так?

 

Сразу вопрос: А если у меня на форуме этих тем 1500, как быть в этом случае. Я же не буду сидеть и все 1500 прописывать через мод. Как быть, что бы всех пользователей по умолчанию подписать на новые сообщения?

 

Введите идентификатор темы
Укажите идентификатор темы, для которой будет создана подписка.

Что в данном случаем является идентификатором темы? Адрес в браузере? Так он для каждой страницы темы разный...

 

Может можно указать сразу все темы?

Опубликовано:
  • Автор

Идентификатор темы — целое неотрицательное цисло, идентифицирующее тему в соответствующей таблице базы данных. Например, в ссылке:

 

http://forum.ru/index.php?showtopic=18306

 

Идентификатором является число 18306.

 

Подписывать сразу на все темы мод не умеет и форум, кстати, тоже. Можно решить модификацией кода форума, но с ростом форума процессы отправки сообщений почты начнут просто падать при отправке из-за огромного количества e-mail'ов.

Опубликовано:
Идентификатор темы — целое неотрицательное цисло, идентифицирующее тему в соответствующей таблице базы данных. Например, в ссылке:

 

http://forum.ru/index.php?showtopic=18306

 

Идентификатором является число 18306.

Да, это я уже вкурил сам. Полюбому спасибо!

 

Подписывать сразу на все темы мод не умеет и форум, кстати, тоже. Можно решить модификацией кода форума, но с ростом форума процессы отправки сообщений почты начнут просто падать при отправке из-за огромного количества e-mail'ов.

 

Сейчас проверил подписку по идентификатору темы, ВСЁ РАБОТАЕТ!

Но мороки много для того, что бы всех и вся подписать на каждую тему.

 

Я не планирую огромного развития форума, он сделан для ограниченного количества пользователей.

А как и где модифицировать код форума?

Изменено пользователем Fisana

Опубликовано:

И еще вопросик: Если я создаю рассылку по теме на определенную группу пользователей сегодня, а завтра к этой группе добавились еще пору пользователей, то эти пользователи не будут в списке рассылок? Или они добавятся ресурсами форума в рассылку как причастные к данной группе пользователей? Как в этой ситуации?

Опубликовано:
  • Автор
Если я создаю рассылку по теме на определенную группу пользователей сегодня, а завтра к этой группе добавились еще пору пользователей, то эти пользователи не будут в списке рассылок?
Нет. Группу подписать нельзя. Мод просто выгребает всех пользователей группы и создает для них персональные подписки.

 

Для ваших целей можно воспользоваться настройкой в админ-панели, позволяющей автоматически подписывать выбранные группы пользователей на все новые темы. Точное название не помню, находится в разделе настроек тем и сообщений.

 

Чтобы настроить всеобщее уведомление о каждом сообщении, нужно модифицировать класс создания этих сообщений, найти кусок, в котором производится поиск подписок и заменить его на получение всех e-mail'ов зарегистрированных пользователей с последующей отправкой.

Опубликовано:
Чтобы настроить всеобщее уведомление о каждом сообщении, нужно модифицировать класс создания этих сообщений, найти кусок, в котором производится поиск подписок и заменить его на получение всех e-mail'ов зарегистрированных пользователей с последующей отправкой.

СПАСИБО! Теоретически я понимаю как это сделать, а вот практически не очень, не силен я в кодах модифицирования. Поправить, смодифицировать, прописать я смогу, а вот самому придумать код не вариант.

Гуру, помогите...

Опубликовано:
  • Автор

/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 штук, остальные отправятся в ходе следующих сессий.

Опубликовано:
Обратите также внимание, что предел отправленных за раз писем — 20 штук, остальные отправятся в ходе следующих сессий.

Спасибо! Буду тестить, по результатам отпишу.

А какова цикличность сессий? Через какое время последует следующая двадцатка и так до полного отправления рассылки?

Опубликовано:
  • Автор

Обработка очереди писем идет при каждой загрузке форума. Я, кстати, ошибся — в стандартной сборке отправляется не 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;

 

То есть, двадцать пять писем за раз.

Опубликовано:
Если нужно изменить и вы уверены, что сервер справится с этим, можно создать в настройках параметр mail_queue_per_blob, равный желаемому количеству отправляемых писем. Не забудьте включить флаг кэша при создании.

А как проверить справляется ли сервер с отправкой? Где можно будет смотреть статистику и возможно ли это? Я планирую поставить цифру 1000.

Опубликовано:
  • Автор

Да ставьте хоть миллион, все равно при таких цифрах увеличение посещаемости форума будет давать непрерывные сбои.

 

Смотреть логи соответствующей задачи в админке (зачеркнута в списке, активируется самим форумом при необходимости).

Опубликовано:

Всё сделал, добавил код, поставил цифру 500, все работает в данный момент прекрасно, но пару деньков понаблюдаю и отпишу результат.

 

Доктор Фредди, БОЛЬШОЕ СПАСИБО!

Опубликовано:

Всё работает прекрасно, даже очень! Завалил всех письмами выше крыши.

Есть несколько вопросов:

1. Как пользователь может отключиться от такой рассылки? Только через запрет получения писем от администрации или есть другой способ? Но в личных данных при такой конфигурации отключить ничего нельзя!

2. На каждое сообщение отправляется сообщение, даже если пользователь не заходил на форум несколько дней, его засыпет письмами по одной и той же теме. Хотя должно быть одно письмо до момента его появления в теме, а после снова, но не когда он не заходит, а его засыпает одним и темже сообщением.

Как поправить, что бы по теме приходило всего одно письмо?

 

 

А так все прекрасно. Спасибо!

Опубликовано:
  • Автор

Хорошая новость: отписаться может обычным способом, через центр управления.

Плохая новость: админ может подписать его обратно.

 

Хорошая новость: обозленный горой писем юзер может запретить уведомления вообще.

Плохая новость... Да нет, это всё.

 

Контроль отправки сделать можно, но мне сейчас некогда. Может, кто-нибудь из коллег заинтересуется — весь нужный код есть ниже в функции, нужно просто продублировать / адаптировать нужные участки.

Создайте аккаунт или войдите в него для комментирования

Сейчас на странице 0

  • Нет пользователей, просматривающих эту страницу.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.