@AlexWD

Как добавить кастомный плейсхолдер в hook FormIt?

На сайте есть форма с заказом прайс-листов. Берутся они из директории в каталоге сайта.
Перебираю и генерирую ссылки я так:


$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`
]]


Как заставить хук отправить плейсхолдер?
  • Вопрос задан
  • 34 просмотра
Решения вопроса 1
an-tar
@an-tar
Full stack web developer
Еще раз подытожу. Хуку не нужно ничего дополнительно передавать. Задайте нужное значение($fields['fileOrder'] = implode(",", $fileOrder)) в массиве параметров для getChunk, там точно что-то есть в $fileOrder?
Сначала значение $fields['fileOrder'], потом передача массива параметров $fields в getChunk.

Ну и это массив, стало быть, нужен какой-то удобочитаемый вид в тело письма.. обернуть во что-нибудь(да хоття бы в implode). А для простоты можно для начала передать текст и убедиться,что он появляется в теле письма под плейсхолдером [[+fileOrder]].
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы