Добро пожаловать на сайт SEDBY

Блок загрузки файла модуля Page

  • 165 просмотров
  • 20 июня, 2024
  • Обновлено: 22 июня, 2024
  • admin
  • Время чтения: 3 минуты
  • 1 (Подробно)
Верстка блока загрузки файла модуля Page движка Cotonti Siena

Загрузка файла со страницы сайта aka download – это всегда востребованный функционал для проекта любой тематики. Есть он и в Cotonti Siena. Впрочем, был и в Генуе и в давно почившем в бозе Seditio. Сейчас уже сложно сказать, насколько этот функционал был улучшен по сравнению с исходным, но и в настоящее время в таком виде он все еще вполне востребован.

Мы не будем сейчас обсуждать вопрос реализации способа выгрузки (upload). Каждый решит его по-своему. Для кого-то подойдет выгрузка через FTP-клиент, кто-то укажет ссылку из облачного хранилища (Google Disk, Dropbox и проч). Сегодня мы рассмотрим только вопрос верстки и настройки блока скачивания.

Как настраивается скачивание файла в модуле Page

Все предельно просто: в шаблоне правки или создания страницы необходимо указать отвечающие за загрузку TPL-теги:

  • PAGEEDIT_FORM_FILE – состояние блока загрузки (выключено (0) || включено (1) || включно только для зарегистрированных пользователей (2)),
  • PAGEEDIT_FORM_URL – URL файла для скачивания,
  • PAGEEDIT_FORM_SIZE – размер скачиваемого файла в байтах,
  • PAGEEDIT_FORM_FILE_DOWNLOADS – количество закачек.

В шаблоне page.edit.tpl это будет выглядеть примерно так:

...
<tr>
	<td>{PHP.L.Download}:</td>
	<td>{PAGEEDIT_FORM_FILE}</td>
</tr>
<tr>
	<td>{PHP.L.URL}:</td>
	<td>{PAGEEDIT_FORM_URL}</td>
</tr>
<tr>
	<td>{PHP.L.Size}:</td>
	<td>{PAGEEDIT_FORM_SIZE}</td>
</tr>
<tr>
	<td>{PHP.L.Count}:</td>
	<td>{PAGEEDIT_FORM_FILE_DOWNLOADS}</td>
</tr>
...

Как это включается

Если значение поля $pag['page_file'] (редактируется с помощью указанного выше тега PAGEEDIT_FORM_FILE) больше нуля, в шаблоне page.tpl будет парситься блок PAGE_FILE:

<!-- BEGIN: PAGE_FILE -->
...
	<!-- BEGIN: MEMBERSONLY -->
	...
	<!-- END: MEMBERSONLY -->
	<!-- BEGIN: DOWNLOAD -->
	...
	<!-- END: DOWNLOAD -->
...
<!-- END: PAGE_FILE -->

Поскольку названия блоков [пока еще] не совсем очевидны, поясним:

  • блок MEMBERSONLY увидят незарегистрированные и неавторизованные пользователи если загрузка ограничена (значение “2”),
  • блок DOWNLOAD увидят те, кто имеет допуск к скачиванию файла.

Теперь по доступным TPL-тегам:

  • PAGE_FILE_SIZE – размер сайта в килобайтах (deprecated, пока сохраняется для совместимости),
  • PAGE_FILE_SIZE_BYTES – размер файла в байтах,
  • PAGE_FILE_SIZE_READABLE – человекопонятный размер файла, результат выполнения функции cot_build_filesize(),
  • PAGE_FILE_COUNT – количество скачиваний,
  • PAGE_FILE_ICON – иконка скачивания (кастомизируется через ресурсную строку),
  • PAGE_FILE_NAME – имя файла без пути к нему,
  • PAGE_FILE_COUNTTIMES – количество скачиваний,
  • PAGE_FILETITLE – при доступности это ссылка для скачивания, без доступа – сообщение “Этот файл доступен только для зарегистрированных пользователей”,
  • PAGE_FILE_URL – при доступности это URL файла, без доступа – ссылка для регистрации cot_url('users', 'm=register').

Как оформляется блок скачивания файла

Я предложу свой вариант разметки, унифицированный с плагином Attach2 и использующий классы фреймворка Bootstrap. Вы же можете реализовать эту историю таким способом, который ближе вам по стилю или духу.

Итак, мой вариант:

<!-- BEGIN: PAGE_FILE -->
<ul class="list-unstyled mb-0">
	<li class="d-flex align-items-center">
		{PAGE_FILE_ICON}
		<div class="mx-2">
			<!-- BEGIN: MEMBERSONLY -->
			<p class="text-white mb-0">
				{PAGE_FILETITLE}
			</p>
			<!-- END: MEMBERSONLY -->
			<!-- BEGIN: DOWNLOAD -->
			<a href="{PAGE_FILE_URL}" class="d-block">{PAGE_FILETITLE}</a>
			<!-- END: DOWNLOAD -->
			<span class="d-block">
				{PAGE_FILE_SIZE_READABLE} ({PHP.L.Downloaded}: {PAGE_FILE_DOWNLOADS_TIMES})
			</span>
		</div>
	</li>
</ul>
<!-- END: PAGE_FILE -->

Если структурно, то слева расположена иконка, справа – название файла, а под ним размер и количество скачиваний. По умолчанию в качестве иконки используется изображение по следующему пути:

$R['page_icon_file_default'] = Cot::$cfg['icons_dir'] . '/' . Cot::$cfg['defaulticons'] . '/24/page.png';

Меня не устроила иконка размером 24x24, поэтому в php-файле темы я переопределил ее на иконку из комплекта плагина Attach2:

$R['page_icon_file_default'] = Cot::$cfg['plugins_dir'] . '/attach2/img/types/48/zip.png';

Родительскому элементу ul необходимо назначить свой класс и кастомизировать в соответствии с дизайном сайта. Как вариант – изменить схему ul > li на, например, div > div или что-то иное. Я использовал маркированный список только для унификации с уже созданными стилями Attach2, в котором вложений может быть несколько.

И последнее. Если есть желание вывести более информативное сообщение при отсутствии доступа, это можно сделать примерно так:

...
<!-- BEGIN: MEMBERSONLY -->
<p class="text-white mb-0">
	{PAGE_TITLE} &ndash; <a href="{PHP|cot_url('users', 'm=register')}" rel="nofollow">зарегистрируйтесь</a> 
	или <a href="{PHP|cot_url('login')}" rel="nofollow">войдите</a> для скачивания
</p>
<!-- END: MEMBERSONLY -->
...

На этом сегодня все. Нескучной верстки!

Ранее мы обсуждали верстку блока администрирования страницы.

Новый комментарий

Имя:
Для редактирования комментария осталось 10 минут
Комментарии отсутствуют
Блок пользователя
Регистрация на нашем сайте позволит вам общаться на форумах и получить доступ к другому полезному функционалу
Вы вошли как Гость