Перейти к содержанию

Настройки и регистрация

В этом уроке добавляем две новые опции в настройки модификаций. Создаем «оповещатель» о новых регистрациях.

Настройки мода⚓︎

В последних выпусках SMF 2.0.x появился такой хук — integrate_general_mod_settings. Он не добавляет отдельную страницу с параметрами мода, но помогает добавить нужные параметры на главную страницу в разделе Настройки модификаций.

Вот простейший пример:

<?php

function example_settings(&$config_vars)
{
    global $txt, $modSettings;

    loadLanguage('MyMod3');

    if (isset($config_vars[0])) {
        $config_vars[] = ['title', 'mymod3_title'];
    }

    $config_vars[] = ['text', 'ext_email'];
    $config_vars[] = ['text', 'ext_pm'];
}

Как и прежде, используется функция loadLanguage для подключения нужного языка с именем MyMod3.{language}.php (Themes/default/languages).

Подключается массив $config_vars, содержащий параметры на главной странице раздела Настройки модификаций. И обратите внимание на строчку:

<?php

if (isset($config_vars[0])) $config_vars[] = array('title', 'mymod3_title');

Если в том разделе уже есть параметры других модов, то перед блоком настроек данного мода появится подзаголовок (чтобы никто не запутался и знал, к какому моду эти параметры относятся). Использовать это не обязательно, но полезно.

Итак, мы создали пару опций для хранения текстовых переменных. Теперь используем эти опции в следующем примере.

Вот как выглядят настройки нашего мода

Функции отправки писем иЛС⚓︎

Время от времени появляются вопросы вида «как сделать рассылку на электронную почту о новых регистрациях?». А делать ничего не нужно — такая опция уже присутствует в настройках регистрации. Но уведомлять можно только администратора. А если требуется добавить ещё пару-тройку «специально уполномоченных» пользователей? В этом случае воспользуемся готовой функцией sendmail:

<?php

sendmail($to, $subject, $message, $from = null, $message_id = null, $send_html = false, $priority = 3, $hotmail_fix = null, $is_private = false)

Подбираем подходящий хук — integrate_register — он перехватывает регистрационные данные пользователей сразу после регистрации, но ДО занесения сведений в базу данных.

<?php

function example_register(&$regOptions, &$theme_vars)
{
    sendmail($to, $subject, $message, null, null, true, 3);
}

В массиве $regOptions содержатся сведения, указанные пользователем при регистрации. Например, $regOptions['username'] — имя. В файле примера (см. ссылку ниже), содержится развёрнутое описание, ознакомьтесь на досуге.

Функция sendmail требует указания некоторых входных параметров: $to, $subject и так далее. Заполним эти данные с помощью $regOptions, а заодно оформим это дело в виде таблицы, которая придёт на указанный в настройках имейл:

<?php

function example_register(&$regOptions, &$theme_vars)
{
    global $txt, $modSettings;

    loadLanguage('MyMod3');

    if (! empty($modSettings['ext_email']) || ! empty($modSettings['ext_pm'])) {
        $subject = $txt['new_user'] . ': ' . $regOptions['register_vars']['member_name'];

        if (! empty($modSettings['ext_email'])) {
            $to = $modSettings['ext_email'];

            $message = '<table border="1" cellpadding="2" cellspacing="1" width="100%" frame="void"><tbody>';
            $message .= '<tr><td><strong>' . $txt['user'] . '</strong>: </td><td>' . $regOptions['register_vars']['member_name'] . '</td></tr>';
            $message .= '<tr><td><strong>' . $txt['email'] . '</strong>: </td><td>' . $regOptions['register_vars']['email_address'] . '</td></tr>';
            $message .= '</tbody></table>';

            sendmail($to, $subject, $message, null, null, true, 3);
        }
    }
}

Получаем информацию в виде таблицы

Итак, в качестве $to используется указанный нами имейл, $subject — это тема отправляемого письма, $message — текст, таблица с некоторой информацией, указанной пользователем при регистрации. Пару параметров пропускаем (указываем вместо них null), и вставляем true, указывая на то, что в письме отправляется HTML, с приоритетом 3 (используется по умолчанию, параметр срочности письма — когда дойдет, тогда дойдет):

<?php

sendmail($to, $subject, $message, null, null, true, 3);

Используем оставшуюся текстовую опцию для указания id пользователей — получателей личных сообщений о новых регистрациях. И также добавим для таких сообщений оформление в виде таблицы:

<?php

if (! empty($modSettings['ext_pm'])) {
    $to = $modSettings['ext_pm'];

    $message = '[ table]';
    $message .= '[ tr][ td][b ]' . $txt['user'] . '[/b ]: [/td ][ td]' . $regOptions['register_vars']['member_name'] . '[/td ][/tr ]';
    $message .= '[ tr][ td][b ]' . $txt['email'] . '[/b ]: [/td ][ td]' . $regOptions['register_vars']['email_address'] . '[/td ][/tr ]';
    $message .= '[/table ]';

    sendpm(['to' => [$to], 'bcc' => []], $subject, $message);
}

Обратите внимание: вместо HTML на этот раз уже используется BBCODE, поскольку личные сообщения отправляются внутри форума.

Здесь уже вместо sendmail задействуется функция sendpm, тоже из стандартной комплектации SMF и похожими параметрами: массив $to (состоит из двух вложенных массивов — «кому» отправляем и«копия» — кто ещё получает; только вот в качестве элементов этих массивов используются не имейлы, а идентификаторы нужных пользователей), $subject и $message.

В итоге слепили этакого «личного помощника», который после регистрации займется рассылкой нам или указанным модераторам сведений о новых пользователях. Кому интересно, попробуйте доработать мод и поделиться с сообществом.

Комментарии