ExportPage

Экспорт ресурсов, создание и вывод файлов экспорта по запросу
Автор дополнения
Володя Володин
Пакетов
38
Закачек
6 602
Автор дополнения
Пакетов
38
Закачек
6 602
Версия 1.0.6-beta
Дата выпуска 21.11.2016
Загрузки 42
Просмотры 22
[ExportPage] — Компонент реализует возможность экспорта ресурсов, создание и вывода файлов экспорта по запросу.


пролог
На момент создания пакет работает только с файлами 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 — скрытая ссылка на файл
— exp.File.Request Сниппет для отдачи файла экспорта по запросу.
Если в предыдущем сниппете мы выводили список существующих файлов и ссылки на их просмотр/загрузку, то с помощью этого сниппета мы можем сформировать ссылку на файл, но как такового файла может еще и не быть.
Параметры сниппета:
  • tpl — Имя чанка для оформления
  • resource — Идентификатор ресурса
  • set — Идентификатор набора
  • mode — Режим отдачи файла
  • type — Тип файла
  • action — Строка запроса
Итого есть следующие режимы (mode) отдачи файла:
  • 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 — доступны все знакомые вам параметры, и я думаю вам не составит труда добавить необходимые условия в пример скрипта.

1.0.6-beta (28.10.2016)

  • Fix "cache" file

1.0.5-beta (28.10.2016)

  • Add "real" parameter

1.0.4-beta (09.02.2016)

  • Reformat code
  • Fix "chunk" getlist.class.php

1.0.3-beta (12.08.2015)

  • fix file creation request

1.0.2-beta (07.08.2015)

  • fix download file for manager

Последние обсуждения в сообществе MODX.pro