Скачать/распечатать прайс-лист в формате pdf

Примерная разметка кнопок для скачивания, просмотра и распечатки прайс-листа: 

Скачать полный прайс материалов и работ <div class="spoiler-block__btn" data-file-url="<?=CFile::GetPath($templateData['ATT_PRICE_3'])?>">
<button class="zooms"></button>
<button class="download" data-url="<?=$templateFolder?>/download/download.php"></button>
<button class="print"></button>
</div>

Здесь мы видим три кнопки button, у одной из которых есть атрибут data-url. Эта кнопка отвечает за скачивание файла и в атрибуте указан путь к файлу-обработчику с содержимым:

<?$myFile = $_SERVER['DOCUMENT_ROOT'].$_GET["filePath"];
$fileNameArr = explode("/", $myFile);
$fileName = $fileNameArr[count($fileNameArr) - 1];
if (file_exists($myFile)){
header ("Content-Type: application/json");
header ("Content-Disposition: attachment; filename=$fileName");
header("Content-Length: " . filesize("$myFile"));
$fp = fopen("$myFile", "r");
fpassthru($fp);
} else {
echo "no file exists";
};

Для корректной работы файла-обработчика нам нужно передавать значение GET-параметра в url с помощью скрипта, в котором также происходит обработка кликов по 2-м другим кнопкам (открыть и распечатать):

$(document).on("click", ".spoiler-block__btn button", function() {
var l = $(this).parent().data("file-url");
if($(this).hasClass("zooms")) window.open(l);
if($(this).hasClass("download")) window.location.href = $(this).data("url") + '?filePath=' + l;
if($(this).hasClass("print")) window.open(l).print();
});

В атрибуте data-file-url div-а с классом .spoiler-block__btn указан путь к прайс-листу, полученный из соответствующего свойства.

bitrixone © 2024