Не создает файл Word через Hook в AjaxForm
Я написал php код в отдельном файле и сохранил его на сервере. Его задача подтягивать поля из формы и создавать Word документ через PhpWord.
Если отправлять форму указывая путь к PHP файлу в Action, то всё работает нормально, но по хорошему, надо сделать через hook в админке modx.
Я попробовал просто вставить код в созданный мной сниппет и подключить его к hook`ам в AjaxForm
Так не работает и спустя несколько часов поиска я решил сюда отписать.
В «Журнале ошибок» пусто.
Я не спец в php, обычно мелкие правки вносил и пользуюсь готовыми решениями.
По задаче, мне нужно будет отправить сгенерированный файл по почте и потому решил сделать через AjaxForm, чтобы отдельно обработчик не писать. Во первых — я нуб в этом, во вторых — мне кажется так будет правильно.
Если отправлять форму указывая путь к PHP файлу в Action, то всё работает нормально, но по хорошему, надо сделать через hook в админке modx.
Я попробовал просто вставить код в созданный мной сниппет и подключить его к hook`ам в AjaxForm
Так не работает и спустя несколько часов поиска я решил сюда отписать.
В «Журнале ошибок» пусто.
<?php
// что-то там с валидацией, без него вроде дальше по хукам не проходит и форма не отправится.
$output = true;
// путь к каталогам, для сокращение ссылок
$path = '/var/www/*****/data/';
require $path . 'vendor/autoload.php';
$document = new \PhpOffice\PhpWord\TemplateProcessor($path . "www/*****/phpword/brif_template.docx");
// По инструкции из PhpWord
$uploadDir = __DIR__;
$outputFile = 'review_full.docx';
// Подтягиваем поля из форм
$campony_name = $hook->getValue('campony_name');
$document->setValue('campony_name', $campony_name);
$contact_name = $hook->getValue('contact_name');
$document->setValue('contact_name', $contact_name);
$current_site = $hook->getValue('current_site');
$document->setValue('current_site', $current_site);
$region = $hook->getValue('region');
$document->setValue('region', $region);
$phone = $hook->getValue('phone');
$document->setValue('phone', $phone);
$mail = $hook->getValue('mail');
$document->setValue('mail', $mail);
$business_line = $hook->getValue('business_line');
$document->setValue('business_line', $business_line);
$competitors = $hook->getValue('competitors');
$document->setValue('competitors', $competitors);
// Сохраняет на сервере
$document->saveAs($outputFile);
return $output;
<section class="main__request request" style=" margin: 100px auto; ">
<div class="request__container container">
<div class="request__inner">
<div class="request__form" style=" margin: 0 auto; ">
[[!AjaxForm?
&snippet = `FormIt`
&form = `brifForm.tpl`
&emailTpl = `brifMail.tpl`
&hooks = `PHPWordForm,spam,email,FormItSaveForm`
&fromName = `Запись онлайн`
&formFields = `mail,phone`
&fieldNames = `mail==E-Mail,phone==Телефон,campony_name==Сообщение`
&emailFrom = `[[++email_from]]`
&emailFromName = `Форма обратной связи`
&emailSubject = `Заявка со страницы - [[*pagetitle]]`
&emailTo = `t2nda@yandex.ru`
&validationErrorMessage = `В форме содержатся ошибки!`
&successMessage = `Спасибо за обращение в нашу компанию!
Менеджер свяжется с вами в ближайшее время`
]]
</div>
</div>
</section>
<form
class="request__form form"
action="[[~[[*id]]? &scheme=`full`]]"
enctype="multipart/form-data"
method="POST"
>
<div class="form__field">
<input type="text" class="form__input" name="campony_name" placeholder="campony_name">
</div>
<div class="form__field">
<input type="text" class="form__input" name="contact_name" placeholder="contact_name">
</div>
<div class="form__field">
<input type="text" class="form__input" name="current_site" placeholder="current_site">
</div>
<div class="form__field">
<input type="text" class="form__input" name="region" placeholder="region">
</div>
<div class="form__field">
<input type="text" class="form__input" name="phone" placeholder="phone">
</div>
<div class="form__field">
<input type="text" class="form__input" name="mail" placeholder="mail">
</div>
<div class="form__field">
<input type="text" class="form__input" name="business_line" placeholder="business_line">
</div>
<div class="form__field">
<input type="text" class="form__input" name="competitors" placeholder="competitors">
</div>
<button class="form__button button button--rounded button--vertical-gradient button--light-blue-blue-gradient" type="submit">
<span>
Оставить заявку
</span>
</button>
</form>
Я не спец в php, обычно мелкие правки вносил и пользуюсь готовыми решениями.
По задаче, мне нужно будет отправить сгенерированный файл по почте и потому решил сделать через AjaxForm, чтобы отдельно обработчик не писать. Во первых — я нуб в этом, во вторых — мне кажется так будет правильно.
Комментарии: 4
попробую свой хук поставить последним
Не помогло
Мне кажется тут
$document->saveAs($outputFile);
должен быть полный путь к файлу, т.е. как в $path
Урааа, помогло! Спасибо тебе ?
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.