CakePHP 1.3 работает с оболочкой cron - передача данных в шаблон электронной почты - PullRequest
1 голос
/ 25 февраля 2011

Я запускаю сценарий оболочки через задание cron.Он правильно отправляет электронное письмо.Однако я хочу иметь возможность передавать данные в шаблон электронной почты из базы данных, что мне кажется невозможным.

Вот оболочка

App::import('Core', 'Controller');
App::import('Component', 'Email');

class ExampleShell extends Shell {

var $uses = array('User');

function main() {

$users = $this->User->find('all');

$this->Controller =& new Controller();
$this->Email =& new EmailComponent(null);
$this->Email->initialize($this->Controller);

$this->Email->reset();
$this->Email->to = 'xx<xx@xx.com>';
$this->Email->subject = "Subject";
$this->Email->template = 'example';
$this->Email->sendAs = "both";
$this->Controller->set('users', $users); 
$this->Email->send();

}

}

Переменная $ users, похоже, небыть доступным в файле example.ctp?Как я могу передать данные из сценария оболочки в шаблон, пожалуйста?

1 Ответ

1 голос
/ 16 октября 2012

Мне удалось сделать это следующим образом

class ExampleShell extends Shell {
  var $uses = array('User');
  var $Controller = null;

  function __construct(&$dispatch) {
    App::import('Core', 'Controller');
    App::import('Controller', 'App');
    $this->Controller = & new Controller();

    App::import('Component', 'Email');
    $this->Email = new EmailComponent();
    $this->Email->initialize($this->Controller); 
    parent::__construct($dispatch); 
  } 

  function main() {
    $users = $this->User->find('all');

    $this->Controller =& new Controller();
    $this->Email =& new EmailComponent(null);
    $this->Email->initialize($this->Controller);

    $this->Email->reset();
    $this->Email->to = 'xx<xx@xx.com>';
    $this->Email->subject = "Subject";
    $this->Email->sendAs = "both";
    $this->Controller->set('users', $users); 
    $this->Email->send(null, 'template_1');
  }
}

Надеюсь, это кому-нибудь поможет.

Убедитесь, что шаблон расположен там, где он должен быть app/views/elements/email/html/template_1.ctp и app/views/elements/email/text/template_1.ctp для текстовой версии. Вы должны создать макеты тоже в app/views/layouts/email/html/default.ctp и app/views/layouts/email/text/default.ctp

...