Иногда при создании сайта требуется страница, на которой нужно организовать скачивание определённых файлов. В данной статье рассмотрен пример создания такой страницы.
Для начала нам нужно создать раздел данных, где будут храниться файлы.
Для этого переходим во вкладку «Данные» и создаём раздел файлов.
В поле «Разрешенные типы файлов» нужно обязательно указать через запятую без пробелов расширения файлов, которые будут храниться в данном разделе, иначе вы не сможете закачать ни одного файла.
Для создания шаблона блока закачки файлов требуется перейти во вкладку «Шаблоны», открыть «Файлы / Список файлов», создать шаблон и написать в него HTML код блока.
HTML код блока:
{if $header}
<h2>{$header}</h2>
{/if}
<table cellpadding="0" cellspacing="5">
{foreach from=$files item=file}
<tr>
<td><img src="/images/book_file.gif" width="24" height="30" border="0" alt="{$file.header}"></td>
<td>
<a href="{$file.href}" title="{$file.header}">{$file.header}</a>
<span> {$file.type|upper} {$file.size|filesize_format}</span>
</td>
</tr>
{/foreach}
</table>
</div>
Хочу обратить внимание на:
- img src="/images/{$file.type}.gif " — в зависимости от типа файла будет грузиться соответствующая иконка
- {$file.size|filesize_format} — модификатор filesize_format не является встроенным и написан отдельно, он используется для перевода размера файла из байтов в килобайты или мегабайты
Далее создаём объект «Файлы / Список файлов» и связываем этот объект с созданным шаблоном.
В объекте можно указать количество отображаемых файлов и по какому принципу их сортировать.
Далее ставим этот объект на нужную нам страницу и смотрим, что у нас получилось.

Комментарии
Как, куда код засунуть и т.п.
Для использования модификатора filesize_format нужно во вкладке «Данные» создать следующий PHP код:
<?php
function smarty_modifier_filesize_format( $size )
{
if( is_null($size) || $size === FALSE || $size == 0 )
return $size;
if( $size > 1024*1024*1024 )
$size = sprintf( "%.1f ГБ", $size / (1024*1024*1024) );
if( $size > 1024*1024 )
$size = sprintf( "%.1f МБ", $size / (1024*1024) );
elseif( $size > 1024 )
$size = sprintf( "%.1f КБ", $size / 1024 );
elseif( $size < 0 )
$size = ' ';
else
$size = sprintf( "%d Б", $size );
return $size;
}
$ctx->_smarty->register_modifier('filesize_format','smarty_modifier_filesize_format');
?>
Далее создаём объект PHP код / Обратный вызов и связываем этот объект с созданным PHP кодом. Затем ставим этот объект на нужную нам страницу (страница со списком файлов) на событие onCreateSmarty.