Перейти к контенту
  • 0

Как изменить условия подписки.


Doping

Вопрос

При обновлении темы на которую подписан юзер, ему приходит письмо (на e-mail) в котором сказано:

 

"Возможно в теме больше одного ответа, но только 1 e-mail будет отправлен Вам после каждого посещения

темы, на которую Вы подписаны. Это является пределом на количество писем отправленных Вам."

 

Как сделать так, что бы юзеру приходило письмо после каждого нового поста в тему + в письме текст нового сообщения?

Ссылка на комментарий
Поделиться на других сайтах

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

  • 0
в письме текст нового сообщения?

Это и так приходит, если у пользователя в профиле указано, что он хочет, чтобы ему вместе с уведомлением приходил и текст сообщения!

 

 

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

Посмотрю вечером, если до меня никто не ответит!

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Файл sources/Post.php

там есть код:

	// Get the email addy's, topic ids and email_full stuff - oh yeah.
	// We only return rows that have a member last_activity of greater than the post itself

	$DB->query("SELECT tr.trid, tr.topic_id, m.name, m.email, m.id, m.email_full, m.language, m.last_activity, t.title, t.forum_id
			    FROM ibf_tracker tr, ibf_topics t,ibf_members m
			    WHERE tr.topic_id='$tid'
			    AND tr.member_id=m.id
			    AND m.id <> '{$ibforums->member['id']}'
			    AND t.tid=tr.topic_id
			    AND m.last_activity > '$last_post'");

убрать оттуда проверку на last_activity. Получится так:

	// Get the email addy's, topic ids and email_full stuff - oh yeah.
	// We only return rows that have a member last_activity of greater than the post itself

	$DB->query("SELECT tr.trid, tr.topic_id, m.name, m.email, m.id, m.email_full, m.language, m.last_activity, t.title, t.forum_id
			    FROM ibf_tracker tr, ibf_topics t,ibf_members m
			    WHERE tr.topic_id='$tid'
			    AND tr.member_id=m.id
			    AND m.id <> '{$ibforums->member['id']}'
			    AND t.tid=tr.topic_id");

 

Должно помочь. Но результат не гарантирую. Не проверял!

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Oska

спасибо. проверить сейчас не смогу, у хостера проблемы с отправкой почты с сервера. Как только всё исправят протестирую, и отпишусь.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Есть снова проблемы по этой теме.

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

 

Изменил эту строку

$SUBJECT['subs_with_post'] = 'Уведомление об ответе в подписанной теме';

 

на эту

$SUBJECT['subs_with_post'] = 'Ответ в тему: <#TITLE#>';

 

<#TITLE#> взял из тела сообщения, где эта переменная выводит название темы.

 

В полученном письме, в SUBJECT написано: "Ответ в тему: ( From forum.web-obzor.com )"

 

Также в тело письма добывил <#FORUM#> (взял из подписки на форум)

В полученном письме эта переменная ни чего не вывела...

 

Вопрос, как заставить в SUBJECT вставлять название темы и как в теле письма вставить название форума от куда эта тема?

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Опять идем в sources/Post.php

Значит чтобы понять, как это все работает:

Для двух подписок (на тему и на форум) в Post.php есть 2 спец. функции, ты наверно их уже смотрел!

Начну со второй задачи.

Значит идем в функцию forum_tracker. Там найди код:

$this->email->build_message

...

Там ты увидишь переменные в том шаблоне (которые такого вида в шаблонах ). Там среди них ты можешь найти строку:

'FORUM'           => $forum_name,

Переменной forum_name и заменяется та запись в шаблонах.

Если ее просто перенести в topic_tracker шаблон, то естесственно она там так просто не заработает. Необходимо добавить подобную строку в свой подобный массив с переменными. Но добавив такую строку, можно будет увидеть, что в той функции нет самой переменной forum_name. Значит ее надо создать или передать. можно конечно сделать запрос к базе и по номеру темы понять, к какому форуму эта тема принадлежит, но можно просто функции передать это имя форума при обращении к ней!

Надо добавить к запросу topic_tracker (post_reply_post.php & post_q_reply_post.php) переменную имени форума, по аналогии к запросу forum_tracker (post_new_post.php). Сейчас мне надо бежать. Приду вечером договорю + по первому вопросу отвечу!

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Значит в файлах post_reply_post.php & post_q_reply_post.php находим строку:

$class->topic_tracker( $this->topic['tid'], $this->post['post'], $class->forum['last_poster_name'], $this->topic['last_post'] );

Добавляем в нее переменную имени форума, так что получается так:

$class->topic_tracker( $this->topic['tid'], $this->post['post'], $class->forum['last_poster_name'], $this->topic['last_post'], $class->forum['name'] );

Далее в Post.php находим:

function topic_tracker($tid="", $post="", $poster="", $last_post="" )

добавляем, чтобы принял он нашу новую переменную имени форума:

function topic_tracker($tid="", $post="", $poster="", $last_post="", $forum_name="" )

 

Далее чуть ниже в этой функции добавляем 2 раза (для шаблона с копией сообщения и для шаблона без копии сообщения) ту нашу строчку. Так что вся функция получается такой:

function topic_tracker($tid="", $post="", $poster="", $last_post="", $forum_name="" )
{
	global $ibforums, $DB, $std;

	require "./sources/lib/emailer.php";

	$this->email = new emailer();

	//-------------------------

	if ($tid == "")
	{
		return TRUE;
	}

	// Get the email addy's, topic ids and email_full stuff - oh yeah.
	// We only return rows that have a member last_activity of greater than the post itself

	$DB->query("SELECT tr.trid, tr.topic_id, m.name, m.email, m.id, m.email_full, m.language, m.last_activity, t.title, t.forum_id
			    FROM ibf_tracker tr, ibf_topics t,ibf_members m
			    WHERE tr.topic_id='$tid'
			    AND tr.member_id=m.id
			    AND m.id <> '{$ibforums->member['id']}'
			    AND t.tid=tr.topic_id
			    AND m.last_activity > '$last_post'");

	if ( $DB->get_num_rows() )
	{
		$trids = array();

		while ( $r = $DB->fetch_row() )
		{

			$r['language'] = $r['language'] ? $r['language'] : 'en';

			if ($r['email_full'] == 1)
			{
				$this->email->get_template("subs_with_post", $r['language']);

				$this->email->build_message( array(
													'TOPIC_ID'        => $r['topic_id'],
													'FORUM_ID'        => $r['forum_id'],
													'TITLE'           => $r['title'],
													'NAME'            => $r['name'],
													'POSTER'          => $poster,
													'POST'            => $post,

                                                                'FORUM'           => $forum_name,

												  )
											);

				$this->email->subject = $ibforums->lang['tt_subject'];
				$this->email->to      = $r['email'];
				$this->email->send_mail();

			}
			else
			{

				$this->email->get_template("subs_no_post", $r['language']);

				$this->email->build_message( array(
													'TOPIC_ID'        => $r['topic_id'],
													'FORUM_ID'        => $r['forum_id'],
													'TITLE'           => $r['title'],
													'NAME'            => $r['name'],
													'POSTER'          => $poster,

                                                               'FORUM'           => $forum_name,
												  )
											);

				$this->email->subject = $ibforums->lang['tt_subject'];
				$this->email->to      = $r['email'];

				$this->email->send_mail();

			}

			$trids[] = $r['trid'];
		}
	}

	//return TRUE;
}

 

Теперь в шаблон добавь

<#FORUM#>

, и по идее должно работать!

 

Про первый вариант надо прилично там модифицировать и в файле emailer.php, чтобы сделать динамической темы письма. Извини за это не возьмусь. Есть дела по важнее. Я помогаю по мере своих возможностей!

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Oska

не работает :D письма приходят, но названия форума в них нет...

вместо текста, случайная, комбинация цифр. например: 1066254411

Ссылка на комментарий
Поделиться на других сайтах

  • 0
Мыло сомнение. Значит все дело, что такой переменной
$class->forum['name']

видимо в этих файлах просто не существует. К сожалению со временем у меня не всё в порядке. Если время появится, то я гляну! Если есть терпение, то жди :D

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Кстати вот есть мод, добавляющий к теме письма название темы. Я его не смотрел, но может ты по этому моду сам сможешь сделать такое же для название форума!

http://mods.ibplanet.com/db/?mod=991

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Oska

Странный хак,

1.
Open sources/Post.php
Find and replace the following lines 2 TIMES!!!
===============================================
Find:
-----
$this->email->subject = $ibforums->lang['tt_subject'];

Replace with:
-------------
$this->email->subject = str_replace("<#TITLE#>", $r['title'], $ibforums->lang['tt_subject']);

#########################################


2.
Open lang/X/lang_post.php
=========================================
Find:
-----
'tt_subject'   => "Topic Subscription Reply Notification",

Replace with:
-------------
'tt_subject'   => "Reply Notification From Topic \"<#TITLE#>\"",

#########################################

 

Т.е. переменная <#TITLE#> добавляется в lang_post.php, а сам текст Subject, берется из email_content.php где ни каких изменений не делается...

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Doping

Вопрос, как заставить в SUBJECT вставлять название темы и как в теле письма вставить название форума от куда эта тема?

Все так как писал Oska только имя форума передавать не надо.

Там же есть запрос в теле Post.php:

       $DB->query("SELECT tr.trid, tr.topic_id, m.name, m.email, m.id, m.email_full, m.language, m.last_activity, t.title, t.forum_id
                   FROM ibf_tracker tr, ibf_topics t,ibf_members m
                   WHERE tr.topic_id='$tid'
                   AND tr.member_id=m.id
                   AND m.id <> '{$ibforums->member['id']}'
                   AND t.tid=tr.topic_id
                   AND m.last_activity > '$last_post'");

 

Надо заменить на:

       $DB->query("SELECT tr.trid, tr.topic_id, m.name, m.email, m.id, m.email_full, m.language, m.last_activity, t.title, t.forum_id, f.name as forum_name
                   FROM ibf_tracker tr, ibf_topics t,ibf_members m
                   LEFT JOIN ibf_forums f ON (f.id = t.forum_id)
                   WHERE tr.topic_id='$tid'
                   AND tr.member_id=m.id
                   AND m.id <> '{$ibforums->member['id']}'
                   AND t.tid=tr.topic_id
                   AND m.last_activity > '$last_post'");

И получишь имя форума из $r['forum_name']

Я этот запрос не проверял, но все должно работать...

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить на вопрос...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.