-
Уведомления или e-mail?
У вас есть несколько вариантов для отправки уведомлений своим пользователям:
Подписка. Пользователи могут подписываться ну других пользователей, на контейнеры контента (например категории) и элементы контента (например темы), тем самым получая уведомления о контент, который их интересует.
Уведомления - Пользователи могут настраивать способы уведомления о некоторых событиях (хочет ли он получать встроенное уведомление, письмо на e-mail или сразу оба способа уведомления) и вы можете отправлять им уведомления в соответствии с этими настройками. Например, уведомления отправляются, когда кто-то опубликует сообщение в профиле другого пользователя. Информацию о том, как это реализовать, смотрите ниже.
E-mail - Вы также можете вручную отправить электронное письмо своему пользователю. Информацию о том, как это реализовать, смотрите ниже.
Хотя все эти 3 системы взаимодействуют друг с другом, важно их не путать: система подписки отправляет уведомление, которое также может быть e-mail письмом. Вы также можете отправить уведомление, которое может быть электронным письмом, или вы можете просто отправить электронное письмо.
Если вам нужно оповестить о чём-то пользователя, вы должны хорошо подумать о том, подходит ли уведомление или e-mail. Как правило, уведомления нужны для того, чтобы сообщить пользователю о том, что произошло то, что ему может быть интересно (Например, уведомления отправляются, когда кто-то опубликует сообщение в профиле другого пользователя), а e-mail письма лучше всего подходят для вещей, которые отвечают конкретному действию, или требуют действия от самого пользователя (например, отправляется e-mail письмо, когда отправляется товар, купленный пользователем в Коммерции).
-
Создание расширения
Первым шагом является создание расширения уведомлений. В Центре разработчика для вашего приложения перейдите на вкладку Extensions > Core и нажмите кнопку "+" справа от пункта Notifications. Будет создан файл в директории вашего приложения extensions/core/Notifications с изначальным скелетом. Откройте этот файл и следуйте инструкциям в нем, чтобы добавить свои типы уведомлений на страницу Настройки уведомлений и создать метод (-ы), который будет контролировать то, что будет отображено пользователю, когда он кликнет на иконку уведомлений в шапке сайта.
Создание e-mail шаблона
Вы должны создать e-mail шаблоны для тех случаев, когда пользователь включил возможность получать e-mail письма при получении уведомления. Следуйте инструкциям, приведенным в шагах 1-2 руководства по отправке e-mail сообщений. Для ваших шаблонов в качестве ключа используйте notification_key, где key это ключ уведомления, указанный вами в методе getConfiguration()). Например: тип уведомления new_status (в приложении core) использует e-mail шаблоны notification_new_status, которые для этого объекта используют строку языка mailsub__core_notification_new_status.
Отправка уведомления
Фактический код для отправки уведомления очень прост:
$notification = new \IPS\Notification( \IPS\Application::load('app'), 'key', $item, $params );
$notification->recipients->attach( \IPS\Member::load(1) );
$notification->send();
$item - Должен быть объект того, о чём отправляется уведомление, что используется для предотвращения отправки одного и того же уведомления более одного раза или NULL, если это не применимо. Если это элемент контента (не обязательно, но будем так считать), уведомление автоматически удалит получателя, если у него нет разрешения на чтение элемента или игнорируется пользователь, который его опубликовал.
$params - Любые параметры, которые вы хотите передать шаблону электронной почты.
Вы вызываете $notification->recipients->attach() для каждого пользователя, которому хотите отправить уведомление, передавай объект \IPS\Member.
-
1. Создание e-mail шаблона
Контент для e-mail сообщений хранится в директории dev/email приложения. Например, если посмотреть в директорию applications/core/dev/email (вам нужно находиться в режиме разработчика, чтобы увидеть эту папку), вы увидите все e-mail сообщения, отправляемые приложением core.
Все e-mail сообщения, отправляемые Invision Community, могут быть в двух форматах: HTML (для большинства e-mail клиентов) и простой текст (для устаревших e-mail клиентов или пользователей, кто намеренно не желает получать письма в простом тексте). Для каждого отправляемого типа существует два файла key.phtml (содержит HTML версию письма) и key.txt (версия с простым текстом).
Обратите внимание, что оба типа сообщений отправляются пользователю, и его почтовый клиент самостоятельно определит наиболее подходящий вариант для отображения.
Для отправки собственных e-mail писем, вы должны создать оба варианта. Их ключи могут быть любыми, но уникальными. Первая строка обоих файлов должна быть тегом:
<ips:template parameters="$parameter1, $parameter2, $email" />
Позже (на шаге 3), когда вы вызываете код для отправки своего e-mail письма, вы можете передать любые параметры, которые хотите использовать в ваших шаблонах.
Внутри своих шаблонов вы можете использовать логику шаблонов и теги шаблонов, однако имейте ввиду, отправленное вами письмо, вероятно, будет с другим авторизованным пользователем при отправке сообщения, поэтому, поэтому не используйте ничего, что зависит от текущего авторизованного пользователя. И самое главное, не используйте тег шаблона {lang=""} (который всегда основывается на текущем авторизованном пользователе). Вместо этого вы можете получить использовать $email->language, являющийся объектом класса \IPS\Lang для правильного использования языка получателя.
Также есть специальный тег {dir}, который также можно использовать в шаблоне. Это либо ltr, либо rtl, в зависимости от языка получателя и применяется (особенно для таблиц) для обеспечения правильного расположения e-mail письма для языка. Пример использования:
<td dir='{dir}' valign='middle' align='center' style="...">
При создании своего шаблона HTML имейте в виду, что почтовые клиенты используют самые разные стандарты для браузеров, и многие обычные техники не могут быть использованы. Мы рекомендуем вам использовать шаблон из какого-либо приложения Invision Community в качестве основы, кроме того вы можете использовать такой инструмент, как Litmus.
При создании шаблона с простым текстом, вы не должны использовать какие-либо HTML теги, а пробелы принимаются во внимание; то есть любые пробелы в шаблоне будут отображаться в письме.
2. Добавление языковой строки для темы письма
Система будет автоматически искать языковую строку с ключом mailsub__<app>_<key>, чтобы использовать её в качестве темы, поэтому необходимо добавить её в файл dev/lang.php. Обратите внимание, что вы можете использовать параметры, которые вы передаете шаблону - например, в файле applications/core/dev/lang.php можно увидеть следующее:
'mailsub__core_notification_new_likes' => '{$member->name|raw} liked your post',
3. Отправка e-mail сообщения
Фактический код для отправки электронной почты очень прост:
\IPS\Email::buildFromTemplate( 'app', 'key', $params )->send( $member );
Метод send() может быть передан как объект \IPS\Member (это лучший способ, так как система будет автоматически настраивать e-mail для пользователя, включая выбор правильного языка) или e-mail адрес в виде строки (что вы должны сделать, если нужно отправить e-mail письмо незарегистрированным пользователям), или массив любого из них для отправки нескольким получателям. Вы также можете передавать второй и третий параметры для пользователей в CC (копия ) и BCC (скрытая копия) соответственно.
Если вы хотите настроить контент сообщения в зависимости от пользователя, вы можете включить переменные в свой шаблон в формате *|key|* , а затем отправить так:
<td>
*|some_key|*<br>
</td>
PHP:
\IPS\Email::buildFromTemplate( 'app', 'key', $params, TRUE )->mergeAndSend( array(
'user1@example.com' => array(
'some_key' => 'value for user 1',
),
'user2@example.com' => array(
'some_key' => 'value for user 2',
)
) );