На сайте есть форма с заказом прайс-листов. Берутся они из директории в каталоге сайта.
Перебираю и генерирую ссылки я так:
$dir = 'prices';
if ( $handle = opendir( $dir ) )
{
while ( $file = readdir($handle) )
{
for ($i=0; $i<count($file); $i++)
if(($file != '.') && ($file != '..') && ($file[0] != '.')) {
$file = mb_convert_encoding($file, "utf-8", "windows-1251");
$file = '<br /><a href="https://.../prices/'.$file.'">'.$file.'</a>';
$fileOrder[] = $file;
}
};
closedir( $handle );
};
Весь хук с отправкой письма выглядит так:
<?php
$fields = $hook->getValues();
$message = $modx->getChunk('tpl.mail.price', $fields);
$modx->getService('mail', 'mail.modPHPMailer');
$modx->mail->set(modMail::MAIL_BODY, $message);
$modx->mail->set(modMail::MAIL_FROM, $modx->getOption('emailsender'));
$modx->mail->set(modMail::MAIL_FROM_NAME, $modx->getOption('site_name'));
$modx->mail->set(modMail::MAIL_SUBJECT, 'Прайс-лист');
$modx->mail->address('to', $fields['email']);
$modx->mail->address('reply-to', $modx->getOption('emailsender'));
$modx->mail->setHTML(true);
$dir = 'prices';
if ( $handle = opendir( $dir ) )
{
while ( $file = readdir($handle) )
{
for ($i=0; $i<count($file); $i++)
if(($file != '.') && ($file != '..') && ($file[0] != '.')) {
$file = mb_convert_encoding($file, "utf-8", "windows-1251");
$file = '<br /><a href="https://.../prices/'.$file.'">'.$file.'</a>';
$fileOrder[] = $file;
}
};
closedir( $handle );
};
$hook->setValue('fileOrder', $fileOrder);
if (!$modx->mail->send()) {
$modx->log(modX::LOG_LEVEL_ERROR,'An error occurred while trying to send the email: '.$modx->mail->mailer->ErrorInfo);
}
$modx->mail->reset();
return true;
В письме я вызываю плейсхолдер так: `
[[+fileOrder]]
`
В итоге на почту приходит письмо с текстом "[[+fileOrder]]", вместо массива.
Вызов сниппета выглядит так:
[[!AjaxForm?
&snippet=`FormIt`
&form=`tpl.price.form`
&hooks=`hookSendFile`
&validate=`email:minLength=^4^,inputt:blank`
]]
Как заставить хук отправить плейсхолдер?