Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
Доктор Фредди

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

Recommended Posts

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

Share this post


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

 

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

 

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

Share this post


Link to post
Share on other sites

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

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

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

 

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

 

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

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

 

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

Share this post


Link to post
Share on other sites

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

 

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

 

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

 

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

Share this post


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

 

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

 

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

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

 

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

 

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

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

 

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

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

Edited by Fisana

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
Если я создаю рассылку по теме на определенную группу пользователей сегодня, а завтра к этой группе добавились еще пору пользователей, то эти пользователи не будут в списке рассылок?
Нет. Группу подписать нельзя. Мод просто выгребает всех пользователей группы и создает для них персональные подписки.

 

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

 

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

Share this post


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

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

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

Share this post


Link to post
Share on other sites

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

Share this post


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

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

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

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites
Если нужно изменить и вы уверены, что сервер справится с этим, можно создать в настройках параметр mail_queue_per_blob, равный желаемому количеству отправляемых писем. Не забудьте включить флаг кэша при создании.

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

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites

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

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

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

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

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

 

 

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

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...