[ExportPage] - Экспорт ресурсов в файлы.
[ExportPage] — Компонент реализует возможность экспорта ресурсов, создание и вывода файлов экспорта по запросу.
пролог
На момент создания пакет работает только с файлами pdf. (mpdf)
Общие настройки
— основные
Основные настройки файлов экспорта.
— права доступа
Настройка прав доступа к файлам экспорта.
— Файлы экспорта. Панель управления файлами экспорта. Можно просмотреть, создать, удалить, обновить файлы экспорта. Доступна сортировка, поиск и управление свойствами файлов экспорта.
— Наборы экспорта. Панель управления набором свойств файла экспорта. Можно задать тип, формат, ориентацию, оформление файла и тд.
Сниппеты ExportPage
— exp.File.List Сниппет для вывода списка файлов экспорта.
Параметры сниппета:
Помимо плейсходеров таблицы файлов, доступны еще специальные плейсходеры-ссылки:
Если в предыдущем сниппете мы выводили список существующих файлов и ссылки на их просмотр/загрузку, то с помощью этого сниппета мы можем сформировать ссылку на файл, но как такового файла может еще и не быть.
Параметры сниппета:
Пользователь перейдя по ссылке запустит процес создания файла и получит файл как если бы он уже существовал на момент запроса.
Файлы экспорта каталогов товара
Все бы ничего, но генерация файла занимает какое то время и в случае если ресурс для генерации представляет собой каталог товара, процесс создания может затянуться. Для этих целей я написал простенький скрипт для запуска из под cron.
шрифт
шрифт меняется в настройке ExportPage exportpage_font
доступные шрифты прописаны в файле config_fonts.php
ps. На сегодня пока все, в дальнейшем распишу более подробно.
Пакет [ExportPage] будет доступен в магазине modstore.pro/ на платной основе. Save2page — будет снят с продаж.
пролог
На момент создания пакет работает только с файлами pdf. (mpdf)
Общие настройки
— основные
Основные настройки файлов экспорта.
- page_orientation — ориентация страницы
- page_format — формат страницы
- page_margins — отступы страницы
- creator — создатель документа
- author — автор документа
- font — шрифт документа
- font_size — размер шрифта документа
- prepare_css — подготовить css
- prepare_img — подготовить изображения
- show_log — показать лог
- source_default — источник файлов
- date_format — формат даты
- Настройки по легкой кастомизации панели файлов экспорта.
- disable_for_resources — Отключить в ресурсах
- disable_for_templates — Отключить у шаблонов
- disable_combo_resources — Отключить выбор ресурса
- disable_combo_users — Отключить выбор пользователя
- disable_field_search — Отключить поле поиска
- disable_combo_source — Отключить выбор источника файлов
- disable_combo_type — Отключить выбор типа файла
— права доступа
Настройка прав доступа к файлам экспорта.
- permit_snippet — Специальный сниппет для проверки прав доступа к файлу
- permit_download — Разрешает режим загрузки файла
- permit_direct — Разрешает режим прямой ссылки на файл
- permit_hidden — Разрешает режим скрытой ссылки на файл
- permit_auto_creation_templates — Список id шаблонов через запятую, для которых разрешено автосоздание документов экспорта
- permit_auto_remove — Разрешает удаление файлов при удалении ресурсов родителей. Файлы на блокировке не удаляются
— Файлы экспорта. Панель управления файлами экспорта. Можно просмотреть, создать, удалить, обновить файлы экспорта. Доступна сортировка, поиск и управление свойствами файлов экспорта.
— Наборы экспорта. Панель управления набором свойств файла экспорта. Можно задать тип, формат, ориентацию, оформление файла и тд.
Сниппеты ExportPage
— exp.File.List Сниппет для вывода списка файлов экспорта.
Параметры сниппета:
- tplRow — Имя чанка для оформления
- tplOuter — Обёртка для вывода результатов работы сниппета
- returnIds — Возвращать строку с id файлов, вместо оформленных чанков
- resource — Идентификатор ресурса
- users — Список id пользователей, через запятую
- where — Массив дополнительных параметров выборки, закодированный в JSON
- showInactive — Показывать неактивные файлы
- sortby — Любое поле для сортировки
- sortdir — Направление сортировки: по убыванию или возрастанию
- limit — Ограничение количества результатов выборки
- showLog — Показывать дополнительную информацию о работе сниппета
Помимо плейсходеров таблицы файлов, доступны еще специальные плейсходеры-ссылки:
- uri_download — ссылка на загрузку файла
- uri_direct — прямая ссылка на файл в источнике файлов
- uri_hidden — скрытая ссылка на файл
Если в предыдущем сниппете мы выводили список существующих файлов и ссылки на их просмотр/загрузку, то с помощью этого сниппета мы можем сформировать ссылку на файл, но как такового файла может еще и не быть.
Параметры сниппета:
- tpl — Имя чанка для оформления
- resource — Идентификатор ресурса
- set — Идентификатор набора
- mode — Режим отдачи файла
- type — Тип файла
- action — Строка запроса
- download — сразу загрузка файла
- direct — открыть файл по прямой ссылке
- hidden — открыть файл по скрытой ссылке
- url — получить ссылку на файл
- json — получить файл в json
Пользователь перейдя по ссылке запустит процес создания файла и получит файл как если бы он уже существовал на момент запроса.
Файлы экспорта каталогов товара
Все бы ничего, но генерация файла занимает какое то время и в случае если ресурс для генерации представляет собой каталог товара, процесс создания может затянуться. Для этих целей я написал простенький скрипт для запуска из под cron.
<?php
define('MODX_API_MODE', true);
//require_once dirname(dirname(__FILE__)) . '/core/config/config.inc.php';
require_once dirname(dirname(dirname(dirname(__FILE__)))) . '/config/config.inc.php';
require_once MODX_BASE_PATH . 'index.php';
// error
$modx->getService('error', 'error.modError');
$modx->getRequest();
$modx->setLogLevel(modX::LOG_LEVEL_ERROR);
$modx->setLogTarget('FILE');
$modx->error->message = null;
/** @var array $scriptProperties */
$scriptProperties = array();
$scriptProperties['returnIds'] = 1;
$scriptProperties['showLog'] = 1;
$scriptProperties['fastMode'] = 1;
$scriptProperties['limit'] = 10;
$scriptProperties['depth'] = 10;
$scriptProperties['parents'] = 0;
$scriptProperties['where'] = '{"class_key:IN":["msProduct","msCategory"]}';
// @var array $params */
$params = array();
$params['mode'] = 'url';
$params['sets'] = 1;
/** @var exportpage $exportpage */
if (!$exportpage = $modx->getService('exportpage', 'exportpage', $modx->getOption('exportpage_core_path', null, $modx->getOption('core_path') . 'components/exportpage/') . 'model/exportpage/', $scriptProperties)) {
return 'Could not load exportpage class!';
}
$exportpage->initialize($modx->context->key, $scriptProperties);
/** @var modSnippet $snippet */
if ($snippet = $modx->getObject('modSnippet', array('name' => 'pdoResources'))) {
$snippet->_cacheable = false;
$snippet->_processed = false;
$ids = $snippet->process($scriptProperties);
}
if (!empty($ids)) {
$ids = explode(',', $ids);
foreach($ids as $id) {
$params['id'] = $id;
if (!$response = $modx->runProcessor('web/files/request',
$params,
array(
'processors_path' => $exportpage->config['processorsPath'],
))
) {
$exportpage->printLog('[ExportPage] Could not create file:');
$exportpage->printLog($params);
}
$modx->error->reset();
$exportpage->printLog('[ExportPage] Generate for id='.$params['id']);
}
}
Выборка ресурсов идет через pdoResources — доступны все знакомые вам параметры, и я думаю вам не составит труда добавить необходимые условия в пример скрипта.шрифт
шрифт меняется в настройке ExportPage exportpage_font
доступные шрифты прописаны в файле config_fonts.php
$this->fontdata = array(
"dejavusanscondensed" => array(
'R' => "DejaVuSansCondensed.ttf",
'B' => "DejaVuSansCondensed-Bold.ttf",
'I' => "DejaVuSansCondensed-Oblique.ttf",
'BI' => "DejaVuSansCondensed-BoldOblique.ttf",
'useOTL' => 0xFF,
'useKashida' => 75,
),
"dejavusans" => array(
'R' => "DejaVuSans.ttf",
'B' => "DejaVuSans-Bold.ttf",
'I' => "DejaVuSans-Oblique.ttf",
'BI' => "DejaVuSans-BoldOblique.ttf",
'useOTL' => 0xFF,
'useKashida' => 75,
),
....
Вы можете добавить свой шрифт самостоятельно, для этого вам нужно положить файлы шрифта в папочку ttfonts библиотеки mpdf и прописать свой шрифт в массив gist.github.com/vgrish/335464df16ccc3db5ccec5459f40e255#file-config_fonts-php-L85ps. На сегодня пока все, в дальнейшем распишу более подробно.
Пакет [ExportPage] будет доступен в магазине modstore.pro/ на платной основе. Save2page — будет снят с продаж.
Поблагодарить автора
Отправить деньги
Комментарии: 37
Разместил: modstore.pro/packages/utilities/exportpage
поддержка Save2page не планируется?
и приобрести Save2page теперь будет нельзя?
и приобрести Save2page теперь будет нельзя?
нет, нет…
хм, а как теперь быть тем, кто уже купил save2page (в бета версии 0.0.4), покупать «улучшенную» версию еще раз за ту же сумму или есть\будут какие-либо скидки на обновление? :)
Василий хотел бы иметь возможность потестить это дополнение на тестовом сайте modhost.pro
Простой вопрос, вывести ссылку «Скачать страницу в PDF» я могу с помощью этого дополнения? Мне не нужен cron, списки файлов и т.д.
Естественно…
exp.File.Request?
Как обстоят у него дела с css стилями? Могу ли я при экспорте задать другой шаблон (ну типа версия для печати). Точнее нужно каким то образом указать разные шаблоны «для печати» для разных шаблонов =)
Как обстоят у него дела с css стилями? Могу ли я при экспорте задать другой шаблон (ну типа версия для печати). Точнее нужно каким то образом указать разные шаблоны «для печати» для разных шаблонов =)
создаете необходимые наборы, в них нужные чанки оформления и все.
Можно ли с помощью данного дополнения организовать вывод содержимого корзины (не заказа) в pdf?
да, по идее можно. надо только добавить параметр принудительного обновления pdf для его формирования в момент запроса. Иначе он сформируется только один раз.
достаточно вызвать сниппет exp.File.Request
например
например
[[!exp.File.Request?
&tpl=`@INLINE <a href="[[+uri_request]]" >download the export file</a>`
&resource=`16`
&set=`1`
&mode=`direct`
&type=`pdf`
&action=`files/request`
]]
где resource — ресурс с корзиной
Ок, спасибо! Надо брать
пожалуйста…
Ок, спасибо! Надо братьНадо тогда добавить параметр обновления)
добавить параметр
&real=`1`
, файл будет обновляться при каждом запросе. Также к имени файла будет добавлен идентификатор сессии.[[!exp.File.Request?
&tpl=`@INLINE <a href="[[+uri_request]]" >download the export file</a>`
&resource=`16`
&set=`1`
&mode=`direct`
&type=`pdf`
&action=`files/request`
&real=`1`
]]
можно ли использовать компонент для генерации двух pdf по двум разным шаблоном для двух языковых версий мультиязычного сайта?
незнаю. Создайте тестовый сайт и там попробуйте…
Что-то не ставится на тестовом… Вопрос: оно будет на php 7.1 работать? Save2page материться на
Fatal error: Switch statements may only contain one default: clause in lib/mpdf/mpdf.php on line 1432
библиотека похоже та же стоит.
Как временное решение: находим и открываем файл mpdf.php, ищем в районе ошибки строку
case 'A4': default: {$format = array(595.28,841.89); break;}
case 'A4': {$format = array(595.28,841.89); break;}
на php 7.1 ошибки в журнал сыплет, но функцию свою выполняет…
Здравствуйте, можно ли использовать это приложение на frontend-e? Например для решение задачи по клику в карточке товара пользователем (не авторизированным в админке и желательно с капчей, чтобы не положили сервер или еще чего) формировать на лету пдф с описанием данного товара и текущей ценой?
Здравствуйте, на frontend-e для авторизованных пользователей есть статистика, собираемая сниппетом, и пишущая данные с свою таблицу в БД. Вашим компонентом можно сформировать PDF из этой статистики по определённым параметрам?(например по дате, по пользователю и т.д.)
Компонент работает с любыми сниппетами и чанками.
Можно взять pdoResources и сделать нужную выборку.
Можно взять pdoResources и сделать нужную выборку.
Спасибо! А экспорт в эксель не планируется?
нет, пока не планируется.
а можно как то скрыть вкладки Файлы экспорта которые образуются при установке компонента?
ну то есть эта вкладка нужна только на некоторых документах ( или шаблонах)
ну то есть эта вкладка нужна только на некоторых документах ( или шаблонах)
В системных настройках ExportPage есть параметр — Отключить у шаблонов.
Привет. Можно ли сохранить в PDF корзину? Т.е. то что выводит в Minishop'е сниппет msCart? Дать юзеру возможность сохранить свой корзинный список (а не заказ). Ну или хотел бы сотрудничества в этом направлении…
Привет.
Можно, пример корзины с ссылкой
Можно, пример корзины с ссылкой
[[!exp.File.Request?
&tpl=`@INLINE <a href="[[+uri_request]]" >download the cart file</a>`
&resource=`16`
&set=`1`
&mode=`direct`
&type=`pdf`
&action=`files/request`
&real=`1`
]]
[[!msCart]]
[[!msOrder]]
[[!msGetOrder]]
где 16 идентификатор страницы с корзиной
Есть ещё pdfResource. В чём ключевые отличия?
незнаю, не пользовался данным дополнением. Можно поставить на демо сайте и пощупать. Если бесплатное дополнение удовлетворяет вашим требованиям то зачем ставить платное?
Ок, посмотрю, за пример тоже спасибо.
Добрый день,
Подскажите по поводу крона.
Использую cronmanager, раньше делали просто из админки, но каталог слишком большой. И так раньше был чанк tpl.exp.create.row
в нем код
Как мне сделать такое же вывод только из под крона?
Я сделал сниппет в нем написал
Я так понимаю, что нужно 100% менять $scriptProperties['parents'] = 0; на свой id
Но вот вопрос:
1. это все, что нужно менять
2. куда будет генерироваться pdf (где ее искать)?
Подскажите по поводу крона.
Использую cronmanager, раньше делали просто из админки, но каталог слишком большой. И так раньше был чанк tpl.exp.create.row
в нем код
<h3>[[+pagetitle]]</h3>
[[+content]]
[[!pdoPage?
&parents=`[[+id]]`
&element=`msProducts`
&limit=`800`
&tpl=`catalog_item_pdf`
&includeTVs=`fasovka`
&sortby=`menuindex`
&sortdir=`ASC`
]]
Как мне сделать такое же вывод только из под крона?
Я сделал сниппет в нем написал
<?php
define('MODX_API_MODE', true);
//require_once dirname(dirname(__FILE__)) . '/core/config/config.inc.php';
require_once dirname(dirname(dirname(dirname(__FILE__)))) . '/config/config.inc.php';
require_once MODX_BASE_PATH . 'index.php';
// error
$modx->getService('error', 'error.modError');
$modx->getRequest();
$modx->setLogLevel(modX::LOG_LEVEL_ERROR);
$modx->setLogTarget('FILE');
$modx->error->message = null;
/** @var array $scriptProperties */
$scriptProperties = array();
$scriptProperties['returnIds'] = 1;
$scriptProperties['showLog'] = 1;
$scriptProperties['fastMode'] = 1;
$scriptProperties['limit'] = 10;
$scriptProperties['depth'] = 10;
$scriptProperties['parents'] = 0;
$scriptProperties['where'] = '{"class_key:IN":["msProduct","msCategory"]}';
// @var array $params */
$params = array();
$params['mode'] = 'url';
$params['sets'] = 1;
/** @var exportpage $exportpage */
if (!$exportpage = $modx->getService('exportpage', 'exportpage', $modx->getOption('exportpage_core_path', null, $modx->getOption('core_path') . 'components/exportpage/') . 'model/exportpage/', $scriptProperties)) {
return 'Could not load exportpage class!';
}
$exportpage->initialize($modx->context->key, $scriptProperties);
/** @var modSnippet $snippet */
if ($snippet = $modx->getObject('modSnippet', array('name' => 'pdoResources'))) {
$snippet->_cacheable = false;
$snippet->_processed = false;
$ids = $snippet->process($scriptProperties);
}
if (!empty($ids)) {
$ids = explode(',', $ids);
foreach($ids as $id) {
$params['id'] = $id;
if (!$response = $modx->runProcessor('web/files/request',
$params,
array(
'processors_path' => $exportpage->config['processorsPath'],
))
) {
$exportpage->printLog('[ExportPage] Could not create file:');
$exportpage->printLog($params);
}
$modx->error->reset();
$exportpage->printLog('[ExportPage] Generate for id='.$params['id']);
}
}
Я так понимаю, что нужно 100% менять $scriptProperties['parents'] = 0; на свой id
Но вот вопрос:
1. это все, что нужно менять
2. куда будет генерироваться pdf (где ее искать)?
Добрый день.
Если вам нужно выполнить создание pdf файла для какого то конкретного ресурса то это примерно так
Если вам нужно выполнить создание pdf файла для какого то конкретного ресурса то это примерно так
/** @var exportpage $exportpage */
if (!$exportpage = $modx->getService('exportpage', 'exportpage', $modx->getOption('exportpage_core_path', null, $modx->getOption('core_path') . 'components/exportpage/') . 'model/exportpage/', [])) {
return 'Could not load exportpage class!';
}
$params = [
'mode' => 'url',
'sets' => '1', // id набора экспорта
'id' => '1', // id нужного ресурса
];
$modx->runProcessor('web/files/request', $params, ['processors_path' => $exportpage->config['processorsPath']]);
куда будет генерироваться pdf (где ее искать)?pdf будет создан у того ресурса который вы и указали и появится в панельке — файлы экспорта
Можете подсказать, я создал тестовый сайт на модхосте и установил ваш плагин
хотел сделать экспорт корзины
хотел сделать экспорт корзины
[[!exp.File.Request?
&tpl=`@INLINE <a href="[[+uri_request]]" >download the export file</a>`
&resource=`2`
&set=`1`
&mode=`direct`
&type=`pdf`
&action=`files/request`
&real=`1`
]]
код взял выше тут же, но при клике в корзине, он делает редирект и пишет «Не разрешенный к экспорту шаблон документа» как исправить? спасибо заранее
разобрался, не указал шаблон в системных настройках
Здравствуйте.
Возникла ошибка которую никак не могу решить.
Не генерирует pdf у товаров где в название слеш, например 4sto.by/katalog/legkovyie/podemniki/2-x-stoechnyie/avtopodemnik-dvuxstoechnyij-rossvik-v2-5.5l-g/p-5.5t,-380v/
Что это может быть?
Возникла ошибка которую никак не могу решить.
Не генерирует pdf у товаров где в название слеш, например 4sto.by/katalog/legkovyie/podemniki/2-x-stoechnyie/avtopodemnik-dvuxstoechnyij-rossvik-v2-5.5l-g/p-5.5t,-380v/
Что это может быть?
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.