Закачка файла с информацией и статистикой скачиваний

Закачка файла с статистикой
Дата: 28 Февраля 2014, в 14:44
Рубрика: MODx Evolution
Просмотры: 1722

На днях искал решение для ModX Evolution, с помощью которого можно организовать скачивание файлов через промежуточную страницу. Вроде такое как на DLE, без прямых ссылок на файл с информацией и статистикой скачивания. Готового решения не было, пришлось написать собственное.

Основные требования к сниппету

  • доступ к файлу только через скрипт, никаких прямых ссылок;
  • записывать и выводить информацию по файлу;
  • вести подсчет и выводить количество закачек файла;
  • если посетитель менеджер (администратор сайта) то количество закачек не вести;
  • поддержка докачки файла.

Установка сниппета FileDownload

1. Итак, для начала надо создать TV-параметр:

  • Имя параметра: fileDownload
  • Заголовок: Файл
  • Тип ввода: File

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

2. Далее создадим в базе данных таблицу modx_file_download с такими полями:

CREATE TABLE IF NOT EXISTS `modx_file_download` (
	`id` int(10) NOT NULL auto_increment,
	`docid` int(10) DEFAULT NULL,
	`fpath` varchar(255) DEFAULT NULL,
	`fsize` int(10) DEFAULT NULL,
	`fhesh` varchar(32) DEFAULT NULL,
	`ftime` int(20) DEFAULT NULL,
	`count` int(10) DEFAULT NULL,
	PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Information about the downloaded files.';

3. Скачиваем архив с сниппетом и распаковываем его в папку assets/snippets/

4. После этого созданим сниппет, который и будет обрабатывать даные и закачку файла:

  • Название сниппета: FileDownload
  • Описание: Скачивание и ведение статистики файлов
  • Код сниппета:
<?php
return require MODX_BASE_PATH.'assets/snippets/filedownload/snippet.FileDownload.php';
?>

5. Создаем страницу download, через которую и будет отдаваться файл. Нужно присвоить ей шаблон blank, скинуть галку «Показывать в меню» и в контент вставить вызов сниппета FileDownload:

[!FileDownload? &stype=`input`!]

6. Создадим чанк с шаблоном вывода ссылки на закачку и статистики файла:

  • Название чанка: fileDownloadTpl
  • Описание: Шаблон блока с ссылкой для скачивания и статистикой файла
  • Код чанка:
<div class="file">
	<a rel="nofollow" href="[~[+route+]~]?[+getid+]=[+docid+]" title="[+fname+]">Скачать / Download</a>
	<span>[[+fsize+]]</span> <span>md5: [+fhesh+]</span> <span>Дата: [+ftime+]</span> <span>Скачали: [+count+]</span>
</div>

Доступные плэйсхолдеры чанка:

  • route - Промежуточный документ для скачивания файла
  • getid - Имя переменной которая будет отображена в ссылке
  • docid - Id документа к которому прикреплен файл
  • fname - Имя файла
  • fsize - Размер файла
  • fhesh - Хеш файла (32 значный код)
  • ftime - Дата создания файла
  • count - Количество закачек файла

7. В шаблон страницы где выводится статья вставляем вызов сниппета FileDownload:

[!FileDownload? &stype=`output` &route=`21`!]

8. Достаточно создать документ и прикрепить файл к документу.

При переходе на страницу документа в том месте где вставлен вызов сниппета выведется блок с ссылкой и информацией (по шаблону который указанный в чанке), при нажатии на ссылку откроется окно сохранения файла.

9. Ну, и наконец, осталось красиво оформить блок, для этого в файл с стилями добавим наши стили для блока:

/* ==================== File Download */
.file {
	border:1px solid #565656;
	background:#313131;
	padding:10px 15px;
	margin:0 0 30px;
}
.file a, .file span {
	display:inline-block;
	font-family:Verdana;
	font-size:11px;
	color:#767676;
	line-height:20px;
}
.file a {
	color:#b6b6b6;
}
.file span {
	margin:0 0 0 10px;
}

Параметры снипета FileDownload

  • stype {str} - Тип вызова сниппета, output - вывести ссылку на закачку и информацию для файла, input - выдать файл на закачку. Default: 'output'
  • route {int} - Промежуточный документ (его id) на котором вызывается сниппет (с типом 'input') для скачивания файла
  • field {str} - Название TV-параметра документа с файлом. Default: 'fileDownload'
  • getid {str} - Имя переменной которая будет отображена в ссылке, передает значение для GET запроса. Default: 'file'
  • fdate {str} - Формат даты времени последнего изменения файла. Default: 'd-m-Y'
  • chunk {str} - Чанк с шаблоном вывода ссылки на закачку и статистики файла. Default: 'fileDownloadTpl'
  • table {str} - Имя таблицы в базе. Default: 'file_download'
Скачать / Download [2.61k] Дата: 28-02-2014 Скачали: 213