ExportPage

Экспорт ресурсов, создание и вывод файлов экспорта по запросу
Автор дополнения
Володя Володин
Пакетов
40
Закачек
9 853
Автор дополнения
Пакетов
40
Закачек
9 853
Версия 1.1.0-beta
Дата выпуска 20.09.2017
Загрузки 55
Просмотры 1 240
Внимание, этот компонент требует версию PHP 5.6 или выше! Если ваш сайт использует PHP ниже требуемого, установка этого дополнения может его сломать.
Внимание, этот компонент требует версию MODX не ниже 2.3 !
[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.1.0-beta (20.09.2017)

  • Add "dependence" validator
  • Add "vendors" resolver
  • Updated "mpdf" version 6.1.4

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