Всем привет! Сразу скажу, что есть варианты решения задачи, но они мне кажутся "неправильными". Очень не хотелось бы использовать костыли, а для нахождения правильного способа реализации мне не хватает опыта и знаний. В общем, хочу, чтобы было красиво и, если после меня этот проект кому-то достанется, никому не пришлось бы страдать.
Есть сайт с материалами и терминами. Мне нужно генерировать из данных этих материалов и терминов файлы pdf, excel, word по строгим шаблонам. Из-за того, что шаблон должен четко соответствовать определенным параметрам, модулями типа data export не обойтись.
Как я вижу реализацию: нужно создать кастомную php-страницу, подключить там нужные библиотеки и генерировать, что нужно.
Если мой вариант является верным, подскажите пожалуйста, как такую страницу правильнее будет создать.
Комментарии
А в какой момент нужно генерировать файлы?
Страница термина таксономии, на которой выведены ссылки на эти документы. В документах используются данные из материалов, привязанных к данному термину.
Как я думаю, это может быть. На примере с pdf.
Создать страницу 'pdf-generation.php'
Генерирую ссылку на странице термина типа pdf-generation.php?tid=$tid
На странице pdf-generation.php я смотрю id термина из get запроса, и по нему вытягиваю, к примеру, заголовки всех материалов, которые к нему привязаны и примерное содержание этой страницы будет:
require_once('tcpdf/tcpdf.php');
class MYPDF extends TCPDF {}
$pdf = new TCPDF(...);
foreach ($titles as $title) {}
...
$pdf->Output('tid.pdf');
Возможно, уже на этом этапе я придумываю какую-то дичь))
сколько раз кликнешь по ссылке pdf-generation.php?tid=$tid столько раз и документ будет генерироваться?
Может целесообразнее будет создавать файлы при создании/редактировании материала, то есть когда однозначно должны быть внесены изменения в ваши pdf, docx и пр. А на странице термина давать ссылки на уже созданные файлы
Генерировать PDF при сохранении такая себе затея, будет очень долго сохранения отрабатывать. Оптимально будет для генерации использовать контроллер, который сначала будет проверять, существует ли файл, если есть, отдавать его, если нет, то генерировать, сохранять и отдавать.
Файл, если я правильно поняла задачу, зависит от термина. То есть, файл уже может существовать, но в нем не будут учтены недавно добавленные материалы.
Только не PHP-страницу, а полноценный контроллер.
https://www.drupal.org/docs/drupal-apis/routing-system/introductory-drup...
https://www.drupal.org/docs/creating-custom-modules/step-by-step-tutoria...
https://www.drupal.org/docs/develop/creating-modules/create-a-custom-pag...
Либы для Word/Excel, PDF (установка в /vendor):
1. https://github.com/PHPOffice/PHPWord
composer require phpoffice/phpword
2. https://github.com/PHPOffice/PHPSpreadsheet
composer require phpoffice/phpspreadsheet --prefer-source
3. https://github.com/mpdf/mpdf
composer require mpdf/mpdf
Спасибо большое! Собственно с контролера и начала, но остановилась, решила уточнить, вдруг не туда пошла. И благодарю за полезные ссылки
Возможно проще сделать по принципу как image styles работают - ссылку давать прямо на файл с названием, содержащим термин таксономии. Если файл уже есть, то веб-сервер будет его сразу отдавать, даже не дёргая Друпал, если нет - Друпал будет вызываться для обработки 404, и тут-то нужно подключать код, который сгенерирует файл, положит на место и отдаст его. Точный хук не подскажу - надо смотреть код image styles.
Точно! При каждом сохранении материала, содержащего ссылку на некий термин, всё ранее сгенерированные файлы для этого термина должны удаляться из файловой системы.