|
ktotoff
АльтерЛан
Зарегистрирован: 2006-12-19
Сообщений: 339
|
У меня есть сходный функционал. Суть:
Есть журнал, который могут скачать только зарегистрированные юзеры. Архив журналов, это шаблон "Журнал", представляющий собой список объектов, как новости. Т.е. каждая "новость" - это:
• В списке объектов выводится картинка обложки и анонс ссылка "Подробнее".
• В полном отображении (переход по ссылке "Подробнее") - картинка обложки, анонс, оглавление и кнопка "Загрузить".
То есть поля такие:
• MagazineCurrentHead Анонс
• MagazineCurrentList Оглавление
• MagazineCurrentImage Картинка обложки
• MagazineCurrentFile PDF-Файл
Задача. Нужно фиксировать нажатие на кнопку "Загрузить" - считать и т.д. У меня была задача увязать загрузки со статистикой: кто какие номера скачал, с какого IP, раскладку по этому IP и т.д.
Решение.
В дополнение к основному шаблону "Журнал", делаем шаблон "Статистика загрузок" с полями:
• DownloadStatUserID ID пользователя
• DownloadStatUserIP IP пользователя
• DownloadStatUserDM Номер загруженного журнала
Проставляем в настройках шаблона "Статистика загрузок" права на добавление всеми пользователями (у меня - только зарегистрированные).
Теперь нам нужно сделать, чтобы загрузка файла писала событие в таблицу этого шаблона. Самый логичный выход - засунуть в полное отображение шаблона "Журнал" альтернативную форму добавления шаблона "Статистика загрузок".
Таким образом, полное отображение объекта в шаблоне "Журнал" выглядит примерно так:
Код:
<img src='$f_MagazineCurrentImage' />
$f_MagazineCurrentHead
$f_MagazineCurrentList
<form method='post' action='/netcat/add.php'>
<div>
<input type='hidden' name='cc' value='Номер шаблона в разделе статистики' />
<input type='hidden' name='sub' value='Номер раздела статистики' />
<input type='hidden' name='catalogue' value='$catalogue' />
<input type='hidden' name='curPos' value='$curPos' />
<input type='hidden' name='posting' value='1' />
<input type='hidden' name='f_MagazinStatUserID' value='$current_user[User_ID]' /> // - берём ID пользователя
<input type='hidden' name='f_MagazinStatUserIP' value='$f_IP' /> // - берём IP пользователя
<input type='hidden' name='f_MagazinStatUserDM' value='$message' /> // - берём номер загружаемого журнала
<input type='submit' class='button' value='Загрузить этот выпуск' onClick="window.open('$f_MagazineCurrentFile')" />
</div>
</form>
В "Действии после добавления" шаблона "Статистика загрузок" пишем:
Код:
";
header("Location: /download/");
echo "
Это нужно, чтобы после загрузки юзер возвращался к списку файлов и как бы не знал, что его считают (с Оперой тут небольшие проблемы).
Вот собственно и всё. Если надо у файла считать количество его загрузок, составляете sql-запрос и выбираете нужные данные из таблицы раздела.
В вашем случае (когда раскладка по юзерам не нужна), если хорошенько подумать, можно и вовсе без второго шаблона обойтись. Можно в шаблон "Журнал" добавить дополнительное числовое поле MagazineDownload и инкрементировать его sql-запросом. В принципе. Но это в том случае, если файлы добавляются через систему. Как считать загрузки внешних файлов я не разбирался.
...жизнь прекрасна, когда правильно подобраны антидепрессанты...
|