Objetivo: Fazer um simples módulo implementado para enviar conteúdos (nodes) já cadastrados no site para o email dos usuários cadastrados na newsletter, sem precisar refazer o post manualmente.
O drupal possui o módulo chamado simplenews (http://drupal.org/project/simplenews) que é utilizado para que você possa postar um conteúdo e este é enviado por email para os assinantes da newsletter, no meu projeto pessoal (http://www.skatistaonline.com) eu queria enviar os posts de eventos para os assinantes um determinado tempo antes da data real do evento, fazendo com que os usuários se lembrem do evento e aproveitando fazendo um gancho para o usuário "clique e dê uma passadinha no site".
Para isso eu utilizei o módulo simplenews, um tipo de conteúdo próprio criado com cck chamado evento (title, body, imagefield, date field), então criei o módulo. :)
Como tudo funciona: O módulo implementa o hook cron, que é responsável por chamar todas as funções que estão implementando esse hook no momento da execução do cron, para controlar e garantir que os emails sejam enviados uma única vez eu criei uma variável que armazena a data (ano, mes e dia) e que fica responsável por fazer executar o script apenas 1 única vez.
bom, é difícil explicar escrevendo, então vou postar a lógica do código aqui, o código está disponível para download mais abaixo. :)
# função responsável por fazer a chamada do meu script de cron
function newsletterEvento_cron() {
_newsletterEvento_procurar();
}
# função que monsta o html do email, com base no objeto node.
function _montaEmail( $n ){}
# função que implementa o envio de email para determinado usuário.
function _sendEmailToUser($user, $subject, $body){}
function _newsletterEvento_procurar( ) {
#ultimo dia em que a news foi enviada.
$lastDay = variable_get('newsletterEventoLastDay', null);
$qtdeDias = 3;
# se nao existir a data entao criamos uma pra ontem e continuamos a rodar.
if( is_null($lastDay) ){
variable_set('newsletterEventoLastDay', date('Y-m-d', time()-3600*24));
$lastDay = variable_get('newsletterEventoLastDay');
}
# verifica que ainda nao enviamos a newsletter.
if( $lastDay != date('Y-m-d') ) {
# busca os dados a serem enviados ( table nodes )
# chama função para preparar o html do email
_montaEmail( );
# busca os usuários que devem receber os emails ( table users JOIN tabela simplenews )
# para cada usuário faz o envio do email
_sendEmailToUser();
}else{
watchdog('newsletterEvento', t('Nenhum evento a ser enviado hoje'));
}
# seta que já foi rodado o cron hoje
variable_set('newsletterEventoLastDay', date('Y-m-d'));
}
}
Obs. utilizando o Drupal 6.3.
| Attachment | Size |
|---|---|
| newsletterEvento.tar | 2.02 KB |