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);
Спасибо всем за помощь.