Костыли для шаблонов уведомлений JotX

Пишу сюда, чтобы не потерять потом решение своей проблемы.
А проблема вот в чём. Есть в JotX некоторые косяки при отправке уведомлений о новых комментариях (автору, модератору, либо подписчикам). А именно:
1. При добавлении комментария пользователем (не гостем), в шаблоне не обрабатываются плейсхолдеры [+comment.custom.name+] и [+comment.custom.email+].
Я решил это следующим образом: задействовал сниппет UserInfo и в шаблоне формы, блок, отвечающий за создание полей ввода имени и email привёл примерно вот к такому виду:
[+form.guest:is=`1`:then=`
								
<div class="group">
	<label for="name">Ваше имя <span class="required">*</span></label>
	<input tabindex="[+jot.seed:math=`?+1`+]" name="name" id="name" type="text" size="35" value="[+form.field.custom.name:esc+]" title="Ваше имя" />
</div>

<div class="group">
	<label for="email">Email (не публикуется) <span class="required">*</span></label>
	<input tabindex="[+jot.seed:math=`?+2`+]" name="email" id="email" type="text" size="35" value="[+form.field.custom.email:esc+]" title="Email (не публикуется)" />
</div>`+][+jot.user.id:is=`0`:then=`

<div class="group">
	[+form.subscribed:is=`0`:then=`<label class="checkbox">
		<input type="checkbox" name="subscribe" id="subscribe" value="1" /> Уведомлять меня о новых комментариях по E-mail`+]
	</label>[+form.subscribed:is=`1`:then=`Вы подписаны на уведомления о новых комментариях`+]
</div>`:else=`

<input name="name" type="hidden" value="[[UserInfo? &info=`fullname` &mode=`mgr`]]" />
<input name="email" type="hidden" value="[[UserInfo? &info=`email` &mode=`mgr`]]" />`+]

Вуаля! Теперь, если коммент отправляется авторизованным пользователем, его имя и почта передаются в скрытых input полях, и корректно отображаются в письме (&mode=`mgr`, при необходимости, заменить на &mode=`web`).

2. В письмах довольно криво создаются ссылки на просмотр комментариев [+jot.link.view+] и отписку от комментариев [+jot.link.unsubscribe+] (ссылки передаются вместе с длинными хвостами get параметров страницы, с которой был отправлен комментарий, что выглядит довольно коряво, да и отписка при переходе по такой ссылке иногда просто не срабатывает).
Решил так:
Во-первых, добавляем пользовательское поле, например url, и в шаблоне формы, передаём его в скрытом поле следующим образом:
$customfields = isset($customfields) ? $customfields : 'name,email,url';
......................
<input name="url" type="hidden" value="/[~[*id*]~]" />

Теперь мы можем в шаблоне письма получить чистый адрес страницы, с которой отправлен комментарий, с помощью плейсхолдера [+comment.custom.url+].

А для того, чтобы ссылки на отписку от комментариев получались всегда стандартного вида, без лишнего мусора, пришлось вставить костыль в файле plugins/subscribe.inc.php. Находим в нём строку:
if ($hash) $params["tpl"]->template = str_replace('[+jot.link.unsubscribe+]','[+jot.link.unsubscribe+]&hash='.$hash,$params["tpl"]->template);

И заменяем на:
if ($hash) $params["tpl"]->template = str_replace('[+jot.link.unsubscribe+]','?jot[+jot.link.id+]=unsubscribe&hash='.$hash.'#jf[+jot.link.id+]',$params["tpl"]->template);

Шаблоны уведомлений приводим примерно к такому виду:
$tplNotify = '@CODE:
Уважаемый(ая) [+recipient.username+],

На сайте "My Site Name" добавлен новый комментарий к статье:
"[+jot.title+]", на которую Вы подписаны.

-----
Добавил: [+comment.custom.name+]
Сообщение:

[+comment.content+]
-----
Посмотреть все комментарии: [+siteurl+][+comment.custom.url+]#comments

Отписаться от уведомлений: [+siteurl+][+comment.custom.url+][+jot.link.unsubscribe+]

С Уважением, служба оповещения [+siteurl+].
';
	
	$tplNotifyAuthor = '@CODE:
Уважаемый [+recipient.fullname+],

К Вашей статье "[+jot.title+]"
добавлен новый комментарий.

-----
Добавил: [+comment.custom.name+]
Email: [+comment.custom.email+]
Сообщение:

[+comment.content+]
-----
Посмотреть все комментарии: [+siteurl+][+comment.custom.url+]#comments
';

Тут #comments — указывает на якорь-ссылку, вставленную в шаблоне страницы непосредственно перед комментариями.

P.S. Если кто-то предложит более элегантные решения, я буду только за!

0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.