Автоматическая отправка сообщений именинникам

+64
5.35K
Автоматическое отправление личного сообщения пользователю в День рождения, а также сообщения на e-email, если пользователь подписан на уведомление.

Используется встроенный cron, и должен быть настроен запуск файла cron.php в заданиях cron сервера. Эту тему лучше перетирать с хостером. smile

Наша задача, дать задание для встроенного cron-а, чтобы он запускал пхп-файл.
Итак, по порядку. Сам файл забираем здесь. Скачали? Теперь нужно подредактировать под себя. А именно, находим строку 49 и вписываем значение переменной $host. Это доменное имя Вашего сайта с префиксами. В скачанном файле вписан домен моего сайта. По аналогии, его заменяете своим. Если не нравится текст поздравления, редактируете значение переменной $message в строке 30. Вроде бы и всё. Хотя, при желании можете подредактировать от кого будет отправляться сообщение (строка 34, переменная $from_id). По умолчанию $from_id=1, это id администратора.

Дальше заливаем отредактированный файл в корень Вашего сайта(ЭТО ВАЖНО!!!).

После чего идем в админку Настройки-> Задачи CRON, нажавь на кнопочку с плюсиком слева вверху, создаем новую задачу. Периодичность выставляем 24ч, а в строке PHP-файл вставляем просто имя файла happybirthday.php. Описание заполняем на Ваше усмотрение. Активируем задачу. Остальные поля трогать не надо.

Вот и всё. Задачу крон на сервере я настроил с запуском каждый день в 00ч 01м. Главное раз в день чтобы запускалось и во встроенном кроне стояла периодичность 24ч.
Поскольку, по умолчанию при регистрации стоит 01.01.80., и многие пользователи не указывают свой день рождения, 1 января сообщения не будут отправляться. Да простят меня те, кто родился в этот день.

Тестировался на хостинге sweb. И важен один момент!!! cron.php должен запускаться напрямую, то есть по пути от корня сервера. Если запускается по get, работать не будет. Нужно менять пути к файлам.

При тестировании не проверялись события 1 января, и в день несколько именинников. В остальном работает нормально.

p.s.Прошу опытных гуру проинспектировть код. Замечаниям буду рад прислушаться. php со словарем.

p.s.s. Спасибо разработчикам за красивый и интуитивно понятный код ядра Инстанта. Самое то, учиться пхп, разбирая Ваш код. Низкий поклон.

UPDATE 06.03.2014

В версии ICMS 1.10.3 поменялись пути к файлам шаблонов почтовых сообщений. Поэтому не отравляются сообщения на e-mail. Для исправления замените строку 52:
  1. $letter_path = PATH.'/includes/letters/newmessage.txt';
на:
  1. $letter_path = PATH.'/languages/ru/letters/newmessage.txt';
В остальном вроде бы работает :=)
0
vitalson9 vitalson9 13 лет назад #
спасибо всё работает ставлю

+

0
Настёна Настёна 13 лет назад #
Здорово!!! Работает! Спасибо!! Большущий +!
0
MonAmur MonAmur 13 лет назад #
Полезная штука, спасибо! Так на Свебе настройки крона указывать?
0
Марат Марат 13 лет назад #
время правильно указали. а путь нужно без первого слэша. путь до домашней директории сайта и слэш вставляет сама система. у Вас получилось два слэша подряд. это неправильно.
0
MonAmur MonAmur 13 лет назад #
только в крон на Свебе надо же по идее cron.php указывать, а не happybirthday.php?
0
Марат Марат 13 лет назад #
да. точно. я и не заметил, что у Вас happybirthday.php указан ). нужно в крон сервера добавить выполнение файла cron.php, а happybirthday.php добавить в задачи крона сайта.
0
MonAmur MonAmur 13 лет назад #
спасибо. заработало ))
+3
Бергал Бергал 13 лет назад #
а можно еще к поздравлению именинника дарить ему какой-нибудь подарок из компонента ПОДАРКИ?
+2
Марат Марат 13 лет назад #
я пока не ставил компонент "подарки", в коде тоже не разбирался. Но думаю можно. все классы ядра грузятся. заморочки с путями. нужно указывать абсолютные пути до файлов, т.е. от корневой директории сервера. И недоступны глобальные переменные окружения, если они используются, нужно продумать какой-то другой способ.
+4
Марат Марат 13 лет назад #
можно реализовать ещё отправку сообщений на e-mail пользователям, которые давно не заходили на сайт. Типа "Уважаемый пользователь, Вы не посещали сайт уже столько-то дней... и.т.д." На каких то социальных сервисах есть подобное вроде.
но до конца июля однозначно не смогу заняться этим. лето... реал...
0
AlekS AlekS 13 лет назад #
Да-да-да, как раз это и искал на сайте:)) и попал на эту тему, пожалуйста если будет время реализуй это, очень полезная и нужная функция!!!:)
+1
Марат Марат 13 лет назад #
Хорошо, сделаю. Только, наверно, скоро не получится. Времени катастрофически не хватает. Недельки 2-3 может быть.
0
lezginka.ru lezginka.ru 11 лет назад #
можно реализовать ещё отправку сообщений на e-mail пользователям, которые давно не заходили на сайт

где-то на сайте видел такое, то ли хак, то ли плагин
0
Марат Марат 11 лет назад #
Аким, уже давно сделал напоминание о существовании сайта )))
0
Mel Mel 13 лет назад #
Спасибо, работает!
0
nikitka nikitka 13 лет назад #
На версии 1.8 не работает!Кто знает причину?
0
Марат Марат 13 лет назад #
Nikitka, всё нормально работает на 1.8. Проверьте включен ли cron у хостера, причина может быть в этом. Вторая причина, вы залили файл не в корень сайта, нужно именно в корень, иначе надо править пути. Третья, не включили задачу в кроне сайта.
0
nikitka nikitka 13 лет назад #
Спасибо Марат!Это я все сделал верно а вот на счет хостера я не узнавал...буду пробивать у них!
+1
nikitka nikitka 13 лет назад #
Марат!Есть предложение к Вам немного дополнить Ваш хак!В день рождения пользователя сделать подарок например 100 баллов рейтинга!Ну и естественно сообщение чтоб приходило об этом подарке!Сможете реализовать?
+1
Марат Марат 13 лет назад #
Постараюсь сделать. Но только, наверно, после Нового года. Абсолютно нет времени )
+1
WALTERZ WALTERZ 12 лет назад #
Накрутки рейтинга не боитесь?
+4
Марат Марат 12 лет назад #
Обнаружена ошибка. Спасибо Майклу, заметил и сообщил. Грешили на хостера, оказалось дело в скрипте.
В дни, когда нет именинников, не выполнялись другие задачи CRON из-за того, что в строке 24 прописано
Код PHP:
if (!$total){ exit(); }
Следует исправить на
Код PHP:
if (!$total){ return; }
Или скачать архив(обновлен) и перезалить файл.
0
Александр Александр 12 лет назад #
спасибо большое +1000
0
alpik alpik 11 лет назад #
Вещь нужная, нужно адаптировать под вер 1.10 или простой перевод в utf-8 сгодится?
+1
Майкл Майкл 11 лет назад #
А что там адаптировать?
Просто перекодировать в utf-8 и будет работать. Проверено!
0
alpik alpik 11 лет назад #
вот это и хотелось услышать )))) просто до кода сегодня добрался, перекодировал в утф - а именинников пока нет ))) сделаем фиктивных проверим )!
0
Майкл Майкл 11 лет назад #
Не сомневайтесь, будет работать )))
0
EVV EVV 11 лет назад #
На 1.10 работает, но сообщение приходит знаками вопросов. Файл birthday.php в кодировке UTF-8. В чем может быть проблема?

Вот как выглядит:
Код PHP:
  1. ? ???? ????????, Тест!
  2. ???? ????? ? ???????
  3. ? ?????????? ?????,
  4. ??? ?????? ??? ???? ????????
  5. ????? ?????? ?????!!!
  6. ????????????? ????? "Сайт.ру - мой сайт".
0
Марат Марат 11 лет назад #
Файл birthday.php в кодировке UTF-8.
Проверьте в БД таблицу cms_user_msg , поле message. Сравнение должно быть utf8_general_ci. Но, скорее всего сам файл birthday.php всё же в неправильной кодировке. Проверьте.
0
EVV EVV 11 лет назад #
Все проверил. Кодировки везде соответствуют.
0
Марат Марат 11 лет назад #
EVV:
Все проверил. Кодировки везде соответствуют.
Хочется верить, но не можется ) Объясню почему? Вот ваше сообщение:
? ???? ????????, Тест! ???? ????? ? ??????? ? ?????????? ?????, ??? ?????? ??? ???? ???????? ????? ?????? ?????!!! ????????????? ????? "Сайт.ру - мой сайт".
А вот участок в файле, где формируется это сообщение:
Код PHP:
  1. $message = "<font color=\"red\">С днем рождения,</font> {$usr['nickname']}!<br><br>
  2. Море шуток и веселья<br>
  3. И шампанское рекой,<br>
  4. Так пускай Ваш День Рождения<br>Будет именно такой!!!<br><br><br>
  5. Администрация сайта \"{$inConf->sitename}\".";
$usr['nickname'] и $inConf->sitename достается и подставляется в нужной кодировке. А остальная часть в неправильной. Какой вывод? Правильно, файл в отличной от utf-8 кодировке.
Как преобразовали файл? Если в Notepad++, то там в меню Кодировки есть два пункта:
1. Кодировать в UTF-8(без BOM)
2. Преобразовать в UTF-8 без BOM
Первый пункт меняет кодировку, но не сохраняет в файле. Второй пункт меняет и сохраняет. Нужно воспользоваться вторым пунктом.
0
lezginka.ru lezginka.ru 11 лет назад #
+
0
Майкл Майкл 11 лет назад #
С согласия Марата выкладываю слегка правленную версию "Автоматическая отправка сообщений именинникам"
Просто в какой то момент заметил, что письма на эл. почту о поздравлении с Днём рождения не приходили.
После небольших правок письма стали приходить.

Не забываем Спасибо говорит Марату.
0
Майкл Майкл 11 лет назад #
Ссылка побилась, исправляюсь
В файле happybirthday.php не забываем поменять имя домена sait.ru на свой

Актуально для версии 1.10 и выше.
+2
Марат Марат 10 лет назад #
Для icms 1.10.3 нужно в файл внести изменение. Подробности в UPDATE 06.03.2014. Спасибо lesterkey, что сообщил :=)
+1
Max Max 10 лет назад #
Спасибо! Отправка сообщений заработала hoho
А возможно ли ограничить количество отправок поздравлений в день с помощью самого скрипта?
При установленном InstantVideo рекомендуется запускать cron раз в 10 минут... В этом случае радости от поздравлений именинник точно не получит laugh
+2
Марат Марат 10 лет назад #
Max:
А возможно ли ограничить количество отправок поздравлений в день с помощью самого скрипта? При установленном InstantVideo рекомендуется запускать cron раз в 10 минут... В этом случае радости от поздравлений именинник точно не получит
Для InstantVideo необходимо запускать задачу cron сайта с периодичностью 10 минут. Но, помимо этого, для каждой задачи отдельно в админке сайта Настройки->Задачи CRON можно отдельно задать свою периодичность. Вот там и поставьте 24 часа. И независимо от того, что cron запускается каждые 10 мин., отправка сообщений будет производиться раз в сутки.
+1
Max Max 10 лет назад #
Благодарю, все оказалось проще, чем я думал.

Еще от автора

Фильтр "Вставка модуля" v 1.0.0
Приветик! Давненько что-то я ничего не писал ) Не знаю было это или не было, вчера увидел темку, решил сделать немного по-другому. Вещь то нужная.
PHP классы для работы с VK API и с API Яндекс Метрики
Доброго времени суток, коллеги! Выкладываю два класса: -для работы с API Вконтакте; -для работы с API Яндекс Метрики.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.