Cakephp - Как перебрать массив в шаблоне электронной почты?

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

Notice (8): Undefined variable: vars [APP\View\Emails\html\latest_projects.ctp, line 1]

Тем не менее, чуть ниже ошибки, он показывает мне информацию, которую я хочу:

(int) 0 => array(
    'Project' => array(
        'id' => '809',
        'created' => '2014-04-23',
        'project_number' => 'SPN00000809',
    )
),
(int) 1 => array(
    'Project' => array(
        'id' => '810',
        'created' => '2014-04-23',
        'project_number' => 'SPN00000810',
    )
)

* Некоторые поля для краткости опущены.

Как мне пройти через этот массив в шаблоне электронной почты? Я пробовал стандартный цикл foreach, как вы это делаете в представлении, но затем я получаю неопределенную переменную, поставляемую перед каждой задачей. Любой совет или предложения?

3 ответа

//Pass your variable
$Email->viewVars(array('projects' => $projects));

//In your email body or template
<ul>
    <?php foreach ($projects as $project) { ?>
        <li><?php echo $project['Project']['project_number']; ?></li>
    <?php } ?>
</ul>

Как сказано в документации:

$Email->viewVars(array('value' => 12345));

Вы сможете использовать его как $value в почтовом шаблоне.

точно так же, как для вашего массива установите 'value', вы сможете использовать $value в качестве массива.

Проблема заключалась в том, что переданный массив $dataForView, который генерируется программой cake, был комбинированным (?) Массивом, что означало, что некоторые ключи были ассоциативными, например $dataForView['content'] => '', тогда как другие ключи были (int)0 => array(); Полученный массив выглядит так:

array(
  content => '',
  (int) 0 => array(
    Project => array(
      fieldName1 => value,
      fieldName2 => value
    )
  ),
  (int) 1 => array(
    Project => array(
      fieldName1 => value,
      fieldName2 => value
    )
  )
)

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

//remove associative key
unset($dataForView['content']);

//loop through array and output values
foreach($dataForView as $key=>$val):
echo $val['Project']['id']; //echo other info as well
endforeach;
debug($dataForView); 

Спасибо всем за помощь.

Другие вопросы по тегам