Нестандартная задача на drupal 10

Главные вкладки

Аватар пользователя gera8774 gera8774 3 июня в 10:15

Всем привет! Сразу скажу, что есть варианты решения задачи, но они мне кажутся "неправильными". Очень не хотелось бы использовать костыли, а для нахождения правильного способа реализации мне не хватает опыта и знаний. В общем, хочу, чтобы было красиво и, если после меня этот проект кому-то достанется, никому не пришлось бы страдать.

Есть сайт с материалами и терминами. Мне нужно генерировать из данных этих материалов и терминов файлы pdf, excel, word по строгим шаблонам. Из-за того, что шаблон должен четко соответствовать определенным параметрам, модулями типа data export не обойтись.

Как я вижу реализацию: нужно создать кастомную php-страницу, подключить там нужные библиотеки и генерировать, что нужно.

Если мой вариант является верным, подскажите пожалуйста, как такую страницу правильнее будет создать.

Комментарии

Аватар пользователя gera8774 gera8774 3 июня в 12:29

Страница термина таксономии, на которой выведены ссылки на эти документы. В документах используются данные из материалов, привязанных к данному термину.
Как я думаю, это может быть. На примере с 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');
Возможно, уже на этом этапе я придумываю какую-то дичь))

Аватар пользователя Никки Никки 3 июня в 16:18

сколько раз кликнешь по ссылке pdf-generation.php?tid=$tid столько раз и документ будет генерироваться?
Может целесообразнее будет создавать файлы при создании/редактировании материала, то есть когда однозначно должны быть внесены изменения в ваши pdf, docx и пр. А на странице термина давать ссылки на уже созданные файлы

Аватар пользователя gun_dose gun_dose 4 июня в 9:22
1

Генерировать PDF при сохранении такая себе затея, будет очень долго сохранения отрабатывать. Оптимально будет для генерации использовать контроллер, который сначала будет проверять, существует ли файл, если есть, отдавать его, если нет, то генерировать, сохранять и отдавать.

Аватар пользователя Никки Никки 4 июня в 9:44

Файл, если я правильно поняла задачу, зависит от термина. То есть, файл уже может существовать, но в нем не будут учтены недавно добавленные материалы.

Аватар пользователя OldWarrior OldWarrior 3 июня в 12:19

gera8774 wrote: Как я вижу реализацию: нужно создать кастомную php-страницу, подключить там нужные библиотеки и генерировать, что нужно.
Если мой вариант является верным, подскажите пожалуйста, как такую страницу правильнее будет создать.

Только не 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

Аватар пользователя gera8774 gera8774 3 июня в 12:31

Спасибо большое! Собственно с контролера и начала, но остановилась, решила уточнить, вдруг не туда пошла. И благодарю за полезные ссылки

Аватар пользователя marassa marassa 4 июня в 13:53

gun_dose wrote: Оптимально будет для генерации использовать контроллер, который сначала будет проверять, существует ли файл, если есть, отдавать его, если нет, то генерировать, сохранять и отдавать.

Возможно проще сделать по принципу как image styles работают - ссылку давать прямо на файл с названием, содержащим термин таксономии. Если файл уже есть, то веб-сервер будет его сразу отдавать, даже не дёргая Друпал, если нет - Друпал будет вызываться для обработки 404, и тут-то нужно подключать код, который сгенерирует файл, положит на место и отдаст его. Точный хук не подскажу - надо смотреть код image styles.

Никки wrote:Файл, если я правильно поняла задачу, зависит от термина. То есть, файл уже может существовать, но в нем не будут учтены недавно добавленные материалы.

Точно! При каждом сохранении материала, содержащего ссылку на некий термин, всё ранее сгенерированные файлы для этого термина должны удаляться из файловой системы.