Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
Доктор Фредди

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

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

Залез через сам форум в личные данныеи посмотрел подписки на рассылки, там есть те рассылки которые я указал в МОДе. Сам мод скорее всего прописывает, что нужно и куда нужно, но вот письма не отправляет. :)

Поделиться сообщением


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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение

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

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

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

 

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

 

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

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

 

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

Поделиться сообщением


Ссылка на сообщение

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

 

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
05/11/09 15:53 (изменено)
Идентификатор темы — целое неотрицательное цисло, идентифицирующее тему в соответствующей таблице базы данных. Например, в ссылке:

 

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 пользователей

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

×
×
  • Создать...