Хотите оперативно получать новые уроки и статьи блога LAWANS.RU. Просто введите ВАШ e-mail на форме справа >>>
Привет Всем!
Давненько я постил статью Расширенная регистрация пользователя в CMS Joomla 2.5.
И вот недавно один из моих читателей попытался разобраться в следующей проблеме и попросил у меня помощи.Он спросил следующее: “На сайте регистрация одобряется вручную админом. Пользователь регистрируется, подтверждает регистрацию и ждет пока его вручную не активируют. Админу приходит письмо, в котором написано: логин пользователя, его мыло и имя. Как мне добавить в это письмо поля из профиля?”
Я посмотрел код и собственно сейчас напишу, как это можно сделать, добавив буквально несколько строк php кода.
Однако для этого придётся изменить код стандартного компонента com_users для Joomla и в последующих обновлениях нет гарантии , что это изменение может сохраниться.
Итак, добавлять код нам придётся в следующем файле \components\com_users\models\registration.php
Находим функцию public function activate($token)
И после запроса к базе:
1 2 3 4 5 6 7 |
$db->setQuery(
'SELECT '.$db->quoteName('id').' FROM '.$db->quoteName('#__users') .
' WHERE '.$db->quoteName('activation').' = '.$db->Quote($token) .
' AND '.$db->quoteName('block').' = 1' .
' AND '.$db->quoteName('lastvisitDate').' = '.$db->Quote($db->getNullDate())
);
$userId = (int) $db->loadResult(); |
Добавляем строку:
1 |
$profile = JUserHelper::getProfile($userId); |
Здесь мы, благодаря могучему фреймворку Joomla , получаем одной строкой все параметры нужного нам пользователя.
А дальше нам просто необходимо добавить необходимые поля в письмо, которое пойдёт админу (о том , что активировался новый пользователь).
Далее по коду найдём такой блок:
1 2 3 4 5 6 7 8 |
$emailBody = JText::sprintf(
'COM_USERS_EMAIL_ACTIVATE_WITH_ADMIN_ACTIVATION_BODY',
$data['sitename'],
$data['name'],
$data['email'],
$data['username'],
$data['siteurl'].'index.php?option=com_users&task=registration.activate&token='.$data['activation']
); |
Здесь как раз идёт заполнение данными тела письма админу. Поэтому нам ещё необходимо видоизменить константу ‘COM_USERS_EMAIL_ACTIVATE_WITH_ADMIN_ACTIVATION_BODY’ в языковом файле – \language\ru-RU\ru-RU.com_users.ini
Зайдём в этот файл и найдя там поиском строку под номером 15 (у меня по крайней мере она там):
1 |
COM_USERS_EMAIL_ACTIVATE_WITH_ADMIN_ACTIVATION_BODY="Здравствуйте, уважаемый администратор!\n\nНовый пользователь только что зарегистрировался на сайте «%s».\nПользователь подтвердил e-mail и просит активировать его учётную запись.\nВ этом письме содержатся его регистрационные данные:\n\n Имя: %s \n E-mail: %s \n Логин: %s \n\nВы можете активировать учётную запись пользователя, перейдя по следующей ссылке:\n %s \n" |
А теперь модифицируйте ее, так как вам надо. Например, так (добавил блок Дополнительные параметры):
1 |
COM_USERS_EMAIL_ACTIVATE_WITH_ADMIN_ACTIVATION_BODY="Здравствуйте, уважаемый администратор!\n\nНовый пользователь только что зарегистрировался на сайте «%s».\nПользователь подтвердил e-mail и просит активировать его учётную запись.\nВ этом письме содержатся его регистрационные данные:\n\n Имя: %s \n E-mail: %s \n Логин: %s \n\n ДОПОЛНИТЕЛЬНЫЕ ПАРАМЕТРЫ: \n Адрес 1: %s \n Город: %s \n Телефон: %s \n\n Вы можете активировать учётную запись пользователя, перейдя по следующей ссылке:\n %s \n" |
Где знак \n –перевод на новую строку, %s – вместо него будут подставляться данные из базы.
Теперь вернемся к переменной $emailBody. И изменим её следующим образом (добавлено 3 переменных $profile):
1 2 3 4 5 6 7 8 9 10 11 |
$emailBody = JText::sprintf(
'COM_USERS_EMAIL_ACTIVATE_WITH_ADMIN_ACTIVATION_BODY',
$data['sitename'],
$data['name'],
$data['email'],
$data['username'],
$profile->profile['address1'],
$profile->profile['city'],
$profile->profile['phone'],
$data['siteurl'].'index.php?option=com_users&task=registration.activate&token='.$data['activation'],
); |
Замечание! Последовательность переменных от $data['sitename'] до $data['siteurl'] должна идти такая же, как и в языковом файле у переменной COM_USERS_EMAIL_ACTIVATE_WITH_ADMIN_ACTIVATION_BODY. Помните значки %s вот они как раз будут заменяться этими переменными и в такой же последовательности. Т.е если меняете очередность вывода значений в языковом файле, то следует её менять и в переменной $emailBody.
И ещё. Где брать значения полей для переменной $profile->profile?
Есть два пути из таблицы user_profiles (поле profile_key) или в файле \plugins\user\profile\profiles\profile.xml (названия полей хранятся в параметрах name)
Вот собственно и всё. Надеюсь всё рассказал понятно. Ну, а если будут вопросы, пишите в комментах.
У ВАС ведь есть ТЕЛЕФОН? Или mp3-player? А может даже планшет, ноутбук или игровая консоль!
Хочется, чтобы он был необычным и уникальным?
Спасибо огромное за статью! Все супер и приходит уведомления, НО столкнулся с проблемой. Есть поле с чекбоксами
1
2
3
Если мы отмечаем значение, то нами выбранный пункт в письме администратору не отображается, но если мы значение поля сменим с checkboxes на radio (то есть радиокнопки) то все значенияghb[jlzn. Никак не могу понять в чем же дело(
блин( кода не видно
field
name=”organization”
type=”radio”
id=”organization”
description=”PLG_USER_PROFILE_FIELD_ORGANIZAT_DESC”
filter=”string”
label=”PLG_USER_PROFILE_FIELD_ORGANIZAT_LABEL”
message=”"
size=”30″
required=”true”
option value=”Конечный пользователь”>Конечный пользователь/option
option value=”Дилер”>Дилер/option
/field
сделал доп поле через radio. Значения value вбил прямо по русски для доп поля. На почту тоже по русски эти значения и пришли.
Коллеги, всем привет!
а как связать данные к почтовому сообщению, которое отправляется админу?
я использую ” Community Builder ” , в нем есть настройки шаблонов, которые отправляются пользователю, а вот админу нет.
все пользователи зарегистрированы через “Community Builder ” автоматически попадают и в штатную базу пользователей джумлы.
вот как и где мне разбить поля в почтовом сообщении для админа и для пользователя если у меня есть отдельные поля в “Community Builder” : фамилия, имя, отчество, и т д?
Очень нужна помощь в этом вопросе.
Заранее благодарен.
Есть реферальная ссылка видаhttp://www.mysite.ru/?r=42 . Цифра 42 – ИД пользователя владельца реферальной ссылки. Вопрос, как можно передать в дополнительное поле регистрационной формы “Ваш рефереал” эту самую цифру, т.е. ИД?