Плагин «Файловый архив» (обновление 10.08.2014)

Описание

Плагин добавляет новый тип топика «Файл».
Позволяет запрещать скачивание файлов для неавторизованных пользователей.
Ведет учет количества скачиваний файла.

GitHub: github.com/wasja1982/livestreet_filearchive

Внешний вид


Создание топика-файла


При включенном запрете для неавторизованных пользователей (ссылка ведет на регистрацию)


При выключенном запрете для неавторизованных пользователей


При недостатке рейтинга для авторизованных пользователей

Настройка

Настройка плагина осуществляется редактированием файла "/plugins/filearchive/config/config.php".

Поддерживаемые директивы:
1) $config['text_max_length'] — Максимальное количество символов в одном топике-файле

2) $config['uploads_files'] — Путь к каталогу с файлами

3) $config['max_size'] — Максимальный размер файла, байт. По умолчанию 1 Мб.

4) $config['only_users'] — Доступ к скачиванию только пользователям. По умолчанию включено (true).

5) $config['use_limit'] — Использовать ограничение рейтинга для доступа к скачиванию (используется при $config['only_users'] = true). По умолчанию отлючено (false).

6) $config['limit_rating'] — Порог рейтинга при котором юзер может скачивать топики (используется при $config['only_users'] = true и $config['use_limit'] = true). По умолчанию 0.

7) $config['allow_ext'] — Разрешенные расширения для файла. По умолчанию — 'pdf', 'rar', 'zip'.

8) $config['show_info'] — Показывать число скачиваний в панели информации топика. По умолчанию включено (true).

9) $config['show_write_item'] — Добавить иконку в меню «Создать». По умолчанию отлючено (false).

Установка

1. Скопировать плагин в каталог /plugins/
2. Через панель управления плагинами (/admin/plugins/) запустить его активацию.

Изменения

1.0.3 (10.08.2014)
— Добавлена поддержка плагина «Nice URL».
— Добавлена поддержка плагина «Skdatedit».

1.0.2 (22.04.2014)
— Добавлен параметр $config['show_write_item'] — Добавить иконку в меню «Создать».
— Добавлена поддержка шаблона Social.
— Добавлена поддержка плагина «Main Preview».
— Добавлена поддержка шаблона Mobile.

1.0.1 (19.12.2013)
— Добавлена функция isFile() — для проверки, является ли топик файлом.
— Добавлено отображение иконки и числа скачиваний.
— Добавлен параметр $config['show_info'] — Показывать число скачиваний в панели информации топика.
— Добавлена обработка тега .
— Сокращенный вывод описания в списке топиков.
— Добавлено ограничение рейтинга на скачивание.
— Добавлен параметр $config['use_limit'] — Использовать ограничение рейтинга для доступа к скачиванию.
— Добавлен параметр $config['limit_rating'] — Порог рейтинга при котором юзер может скачивать топики.

86 комментариев

avatar
Спасибо, очень кстати )
avatar
Вот спасибо!
avatar
Спасибо за плагин.
Сам делал себе такую штуку пол года назад. Всё реализовал с помощью дополнительного поля к топику. Мануал есть в сообществе.
avatar
Подскажи пожалуйста ссылку на мануал в сообществе… что то не нашел поиском.
avatar
livestreet.ru/blog/8953.html
Не смущайтесь что для ver 0.5, я делал всё по нему, всё работает!
avatar
Спасибо огромное… сейчас задумался делать как в топике или поставить готовый плагин:)
avatar
А где отображается количество скачиваний?
avatar
Всплывающая подсказка на ссылке для скачивания.
avatar
Спасибо огромное! Давно ждал!
avatar
Поставил плагин, при попытке опубликовать топик сразу выдало Hacking attemp!
avatar
Правда я добавил в конфиг формат doc и пытался загрузить файл ворда… Другие типы файлов сожно добавлять или только эти три?
avatar
Да, конечно можно. Добавьте нужное расширение в массив $config['allow_ext'] в файле "/plugins/filearchive/config/config.php".
avatar
Кеш очищали?
avatar
Кеш системы и браузера очищал. Проверьте кто нибудь формат doc — все равно пишет Hacking attemp!
avatar
Причем сами файлы формата doc грузятся по таким адресам uploads/files/00/00/01/2013/12/17 Файлы грузятся и потом эта ошибка. Сейчас попробую поотключать плагины последовательно…
avatar
На rar тоже самое:( Форматы ни при чем:(
avatar
Вычислил — ошибка из за плагина Антиспам — catalog.livestreetcms.com/addon/view/372/ Отписал автору в техподдержку чтобы поправил для совместимости. А может файловому архиву надо поправить… там хрен поймешь кто прав а кто неправ:)))
avatar
Даже не знаю, как и проверить — плагина этого у меня нет.

Скорее всего там данные, которые должны генерироваться скриптом, в форму не подставляются, что и дает ошибку. А может наоборот, данные подставляются, а вот проверка не переопределена полностью.
avatar
— Добавлено удаление файла при удалении топика-файла.
— Исправлена ошибка с сохранением файла — теперь сохранение происходит только после успешной верификации данных.
avatar
Отлично!
Кстати, есть предложение:
Перенести ссылку на скачивание в блок с Оценками Просмотрами Избранным, так же в виде иконки.
avatar
Легко. Но с Вас подходящая иконка. :)
avatar
есть ведь в стандартном спрайте (icon.css и images/icons.png):
.icon-download-alt
avatar
Сделал, но по-моему иконка так себе смотрится:
avatar
Думаю, если установить для неё opacity где-нибудь 0.6, а по hover-у 1.0 — думаю впишется. А по большому счету не так важно, т.к. каждый подпилит под свой шаблон.
avatar
А я уже так сделал:

— на мой взгляд кнопка должна максимально мотивировать пользователя, а в «topic-info» её сразу и не увидишь...(имхо конечно).
avatar
А я уже так сделал:
Неплохо, мне нравится. Но под все дизайны не подойдет.

— на мой взгляд кнопка должна максимально мотивировать пользователя, а в «topic-info» её сразу и не увидишь...(имхо конечно).
Но в принципе ничего плохого в выводе количества скачиваний в «topic-info» нет.
Вот сносить ли основную ссылку — это пусть каждый сам решает.
avatar
Кстати, а текст (или title) ссылки задается вручную (опционально?) или берется из названия файла?
avatar
Оригинальное имя файла, сохраняемое в БД.
avatar
Соответственно предлагаю задавать при upload-е имя ссылки. Т.к. «Скачать abrakadabra.pdf» часто будет не информативно.
avatar
Ограничить по рейтингу можно?
Вообще есть наблюдения, что большинство плагинов юзают ограничения (вот предположил возможные). Почему бы не включить в LS некий модуль со всеми возможными ограничениями на просмотр, а плагинах и их конфигах прописывать какие надо. Типа getIsAllowView.
Ведь в отношении топиков есть getIsAllowEdit и getIsAllowDelete.
avatar
Ограничить по рейтингу можно?
Ограничение по рейтингу будет в следующей версии.
Почему бы не включить в LS некий модуль со всеми возможными ограничениями на просмотр
Потому что будет избыточно.
avatar
Почему бы не включить в LS некий модуль со всеми возможными ограничениями на просмотр, а плагинах и их конфигах прописывать какие надо. Типа getIsAllowView.
Ведь в отношении топиков есть getIsAllowEdit и getIsAllowDelete.
логично, но для всех не предусмотришь т.к. сам код должен зависеть от неких внутренних данных каждой из структур. А вот создать интерфейс, который бы заставил разработчиков писать такие методы для каждой из структур — это уже более хорошая идея. Но в лс интерфейсы не используются.
avatar
А зачем интерфейс? Нельзя в движок что-то встроить, чтобы работало примерно так:
getIsAllowView (
    unregistered: false;
    age: 18; // если не указан, то - "Необходимо указать в профиле возраст..."
    min_rating: 1;
    min_skill: 1;
    date_from_reg: 30;
    comments: 3;
    topics: 1;
    subscribed_to_blog: true; // если нет то - "Необходимо вступить в блог..."
    in_friends: false;
)

каждый параметр необязательный, по умолчанию — 0, false
А в плагинах выводить эти значения из их конфигов…
avatar
Добавлено ограничение рейтинга на скачивание.
Добавлены параметры:
— $config['use_limit'] — Использовать ограничение рейтинга для доступа к скачиванию (используется при $config['only_users'] = true). По умолчанию отлючено (false).
— $config['limit_rating'] — Порог рейтинга при котором юзер может скачивать топики (используется при $config['only_users'] = true и $config['use_limit'] = true). По умолчанию 0.
avatar
— Добавлена функция isFile() — для проверки, является ли топик файлом.
— Добавлено отображение иконки и числа скачиваний.
— Добавлен параметр $config['show_info'] — Показывать число скачиваний в панели информации топика.
— Добавлена обработка тега .
— Сокращенный вывод описания в списке топиков.
avatar
Предложение для конфига :)
Разрешить прикреплять файлы к следующим типам топика: array (...)
Добавить тип топика «Топик-Файл»: true, false
avatar
Разрешить прикреплять файлы к следующим типам топика: array (...)
Уже есть.
avatar
Это не то… в том плагине даже нет возможности ограничить скачивание только зарегистрированным пользователям… не доведен он до ума. Ограничение по рейтингу для загрузки файлов есть, а для скачивания нету…
avatar
Пробую активировать:

Ошибка:
Файл плагина /usr/share/nginx/www/plugins/livestreet_filearchive/PluginLivestreet_filearchive.class.php не найден

root@PRON:/usr/share/nginx/www/plugins# ls livestreet_filearchive
classes  PluginFilearchive.class.php  README.md   templates
config   plugin.xml                   readme.txt


Переименовываю PluginFilearchive.class.php в PluginLivestreet_filearchive.class.php и получаю:

Fatal error: Class 'PluginLivestreet_filearchive' not found in /usr/share/nginx/www/plugins/aceadminpanel/classes/modules/plugin/Plugin.class.php on line 112
avatar
Папка плагина должна называться «filearchive», а не «livestreet_filearchive».
avatar
Помогло. Благодарю!
avatar
Плагин установился, но при попытке создать топик — файл появляется: Fatal error: Uncaught exception 'SmartyException' with message 'Unable to load template file 'menu.create.content.tpl' in 'nav_content.tpl'' in /var/www/roditeli/engine/lib/external/Smarty/libs/sysplugins/smarty_internal_templatebase.php:127 Stack trace: #0 /var/www/roditeli/engine/lib/external/Smarty/libs/sysplugins/smarty_internal_template.php(288): Smarty_Internal_TemplateBase->fetch(NULL, NULL, NULL, NULL, false, false, true) #1 /var/www/roditeli/templates/compiled/social/a3d07afd9c16e9fcf68e6e6e2834d1302df6c649.file.nav_content.tpl.php(36): Smarty_Internal_Template->getSubTemplate('menu.create.con...', NULL, NULL, NULL, NULL, Array, 0) #2 /var/www/roditeli/engine/lib/external/Smarty/libs/sysplugins/smarty_internal_templatebase.php(180): content_52b5ee979ddc13_66835478(Object(Smarty_Internal_Template)) #3 /var/www/roditeli/engine/lib/external/Smarty/libs/sysplugins/smarty_internal_template.php(288): Smarty_Internal_TemplateBase->fetch(NULL, NULL, NULL, NULL, false, false, true) #4 /var/www/roditeli/templates/compiled/ in /var/www/roditeli/engine/lib/external/Smarty/libs/sysplugins/smarty_internal_templatebase.php on line 127
avatar
Кеш очищали?
avatar
да
avatar
Содержимое папки "/templates/compiled/имя_шаблона/" удаляли?

Какой шаблон используется? Файл «menu.create.content.tpl» вообще присутствует в Вашем шаблоне?
avatar
Под какую вообще версию LiveStreet Вы пытаетесь запустить плагин? Он только для 1.0.3 проверялся.
avatar
На шаблоне social выдает ошибку:

Action: «file» (PluginFilearchive_ActionFile)
Event: «add»
Error number:
1
Error message:
Uncaught exception 'SmartyException' with message 'Unable to load template file 'menu.create.content.tpl' in 'nav_content.tpl'' in /..../engine/lib/external/Smarty/libs/sysplugins/smarty_internal_templatebase.php:127
Stack trace:
#0 /...../engine/lib/external/Smarty/libs/sysplugins/smarty_internal_template.php(288): Smarty_Internal_TemplateBase->fetch(NULL, NULL, NULL, NULL, false, false, true)
#1 /...../templates/compiled/social/90ac032a8441ce73396637c70a8951c83a454f9e.file.nav_content.tpl.php(36): Smarty_Internal_Template->getSubTemplate('menu.create.con...', NULL, NULL, NULL, NULL, Array, 0)
#2 /..../engine/lib/external/Smarty/libs/sysplugins/smarty_internal_templatebase.php(180): content_52b9de644917e0_37041305(Object(Smarty_Internal_Template))
#3 /...../engine/lib/external/Smarty/libs/sysplugins/smarty_internal_template.php(288): Smarty_Internal_TemplateB
File:
/..../engine/lib/external/Smarty/libs/sysplugins/smarty_internal_templatebase.php
Line:
127

На стандартном шаблоне этой ошибки нету… посмотрите пожалуйста что нужно поправить… LS 1.0.3
avatar
В social файл называется menu.create.tpl а в стандартном menu.create.content.tpl Наверное из за этого ошибка… вот как грамотно переименовать или пофиксить?
avatar
думаю, надо адаптировать, примерно так:
— создать папку /plugins/filearchive/templates/skin/social/
— скопировать туда содержимое папки /plugins/filearchive/templates/skin/default/
— в файле /plugins/filearchive/templates/skin/social/actions/ActionFile/add.tpl в этой строке заменить menu_content='create' на menu='create'
avatar
Такого шаблона у меня нет, поэтому мне нужны 3 файла из шаблона для ознакомления:
— nav_content.tpl
— menu.create.tpl
— actions/ActionTopic/add.tpl
avatar
Вся разница в том, что файл menu.create.content.tpl называется menu.create.tpl
А подключается эта менюшка menu='create' (а не menu_content='create') — подсмотрено в actions/ActionTopic/add.tpl
avatar
протестировал этот вариант — работает
avatar
Это замечательно, но все же я бы предпочел ознакомиться со вышеперечисленными файлами лично, чтобы быть уверенным в максимальной адаптации. Это касается любых плагинов, не только Social.
PS. Да, еще файлик «topic_topic.tpl» тоже хотелось бы глянуть.
avatar
Предложение: добавить в window_write.tpl хуком {hook run='write_item' isPopup=true} иконку добавления файла
avatar
Принято, но традиционная просьба — поделитесь подходящей иконкой.
avatar
думаю, лучше использовать иконку папки из комплекта, остальное дело индивидуальное…
попробовал так:
по хуку {hook run='write_item' isPopup=true}:
<li class="write-item-type-file">
  <a class="write-item-image" href="{router page='file'}add/"></a>
  <a class="write-item-link" href="{router page='file'}add/">{$aLang.plugin.filearchive.topic_menu_add_file}</a>
</li>

в CSS (он у вас пока не подключен):
.modal.modal-write .write-list li.write-item-type-file .write-item-image { background-position: -115px 0; }

Вроде смотрится норм.
avatar
Добавлен параметр $config['show_write_item'] — Добавить иконку в меню «Создать». По умолчанию отлючено (false).
avatar
Не понимаю зачем делать еще один тип контента, когда можно просто к топику добавить возможность добавлять файлы? Надо упрощать контент объединив все виды контента в один, а не создавать кучу новых.
avatar
Такой плагин уже есть — пользуйтесь на здоровье.
А по поводу данного плагина — идея не в том, чтобы позволить пользователям прикреплять файлы к топикам, а в том, чтобы пользователи могли добавлять файлы, сопроводив их детальным описанием (плюс ограничение рейтинга для скачивания).
avatar
Предложение — прикреплять по несколько файлов (макс. кол-во задавать в конфиге)
И небольшая проблема: при добавлении/ редактировании топика-файла в самом низу не отображается блок заливки превью от плагина mainpreview
avatar
Предложение — прикреплять по несколько файлов (макс. кол-во задавать в конфиге)
Без реализации AJAX-версии добавления файла — не вижу смысла. А AJAX у меня запланирован только в Pro версии плагина (если дойдут руки).
avatar
Можно ли сделать так, чтобы после загрузки имя файла оставалось оригинальным? Чтобы избежать конфликтов имен — как вариант добавить в путь загрузки topic_id

Возможно ли опционально задавать ссылке title вручную?
avatar
Можно ли сделать так, чтобы после загрузки имя файла оставалось оригинальным?
Можно, но это потребует, чтобы запрос каждого файла осуществлялся через PHP-скрипт. Текущая реализация позволяет, чтобы файл, поскольку он статический, отдавался сразу nginx или apache.
Возможно ли опционально задавать ссылке title вручную?
Зачем? :)
avatar
Например, имеем к выгрузке некий доклад, файл наз-ся doklad.doc, а доклад: «Влияние походки на сердечно-сосудистую систему». Вот два варианта:
Скачать doklad.doc
Скачать доклад: «Влияние походки на сердечно-сосудистую систему»
имхо 2-й вариант смотрибельнее…
avatar
Для этой цели можно задействовать заголовок топика — в файле «topic_file.tpl» вместо:
{$aLang.plugin.filearchive.topic_file_download} "{$oTopic->getFileName()}"

подставьте
{$aLang.plugin.filearchive.topic_file_download} "{$oTopic->getTitle()|escape:'html'}"
avatar
спасибо, только я немного напутал title с названием ссылки
вот если бы опционально задавать имя ссылке… :)
avatar
наверное, без «лазанья» в БД не обойтись...?
avatar
А может замут сделать, чтоб файлы можно за деньги было скачивать.
например человек залил шаблон и хочет его продать. Было бы не плохо.
можно даже в платной версии сделать такой замут, мало ли кому нужно для бизнеса.
  • lol
  • 0
avatar
Такой замут уже давно есть catalog.livestreetcms.com/addon/view/202/
avatar
это не то что я имею веду
avatar
Добавлена поддержка шаблона Social.
avatar
Добавлена поддержка плагина «Main Preview».
avatar
При сохранении топика выдает: Ошибка: Ошибка передачи файла на сервер
avatar
Ошибка выдается:
1) если файл не был загружен на сервер (из-за ограничений сервера, например);
2) изменен шаблон и удалено поле «topic_file»;
3) не выбран файл.
avatar
Не дружит с плагином Multiblog, можно выбрать только один блог для публикации.
  • DNF
  • 0
avatar
Не имею на руках данного плагина, но могу предположить, что проблема в отсутствии требуемых хуков. Попробуйте в файле «plugins/filearchive/templates/default/actions/ActionFile/add.tpl» в строках инициализации хуков:
{hook run='add_topic_file_begin'}
{hook run='form_add_topic_file_begin'}
{hook run='form_add_topic_file_end'}
{hook run='add_topic_file_end'}

заменить «add_topic_file» на «add_topic_topic».
Если не сработает, то проблема глубже и без исходников плагина «Multiblog» решить ее у меня не получится.
avatar
Помогло, спасибо!
Только адрес "/plugins/filearchive/templates/skin/default/actions/ActionFile/add.tpl».
Это я для других, ну мало-ли.
avatar
Это помогло и с плагином «TreeBlogs (Дерево блогов)» catalog.livestreetcms.com/addon/view/433/
Спасибо.
avatar
Мелкая фича в мобильном шаблоне, возможно в обычном тоже, не проверял

Первая картинка показывает что должно быть

Вторая картинка показывает чего нет при создании файла
  • lol
  • 0
avatar
Исправил github.com/wasja1982/livestreet_filearchive/commit/6d3de1e5a584b57a835e04887276667980e5766e (та же проблема, что была с шаблоном Social)
avatar
Добавлена поддержка шаблона "VK Flat Style".
avatar
А есть ли возможность организовать вывод ВСЕХ файлов на одну страницу или несколько с пагинацией, вроде того:
Название файла — размер — «скачать»
===============================================
Название файла — размер — «скачать»
===============================================
Название файла — размер — «скачать»
===============================================

Ковыряю уже второй час((( совсем беда…
avatar
Чисто теоретически, конечно можно. :)
Для этого необходимо создать наследников файлов ActionBlog.class.php, ActionIndex.class.php и ActionPersonalBlog.class.php, добавить новый ивенты в этих файлах (пример) и добавить функции выборки из БД подходящих топиков, т.е. тех где topic_type равен «file» (пример).
Если получится реализовать, формируйте Pull request на GitHub, добавлю функционал в плагин.
avatar
На BlissPlus выдает:

Fatal error: Uncaught exception 'SmartyException' with message 'Unable to load template file 'menu.create.content.tpl' in 'nav_content.tpl'' in /home/u781268470/public_html/blogs/engine/lib/external/Smarty/libs/sysplugins/smarty_internal_templatebase.php:127 Stack trace: #0 /home/u781268470/public_html/blogs/engine/lib/external/Smarty/libs/sysplugins/smarty_internal_template.php(288): Smarty_Internal_TemplateBase->fetch(NULL, NULL, NULL, NULL, false, false, true) #1 /home/u781268470/public_html/blogs/templates/compiled/blissplus/869c4bbb68ff139bcd11d959ca2554329c9aff08.file.nav_content.tpl.php(27): Smarty_Internal_Template->getSubTemplate('menu.create.con...', NULL, NULL, NULL, NULL, Array, 0) #2 /home/u781268470/public_html/blogs/engine/lib/external/Smarty/libs/sysplugins/smarty_internal_templatebase.php(180): content_56c1d9ca81f1b2_91951940(Object(Smarty_Internal_Template)) #3 /home/u781268470/public_html/blogs/engine/lib/external/Smarty/libs/sysplugins/smarty_internal_template.php(288): Smarty_Internal_TemplateBase->fe in /home/u781268470/public_html/blogs/engine/lib/external/Smarty/libs/sysplugins/smarty_internal_templatebase.php on line 127
avatar
Fatal error: Uncaught exception 'SmartyException' with message 'Unable to load template file 'menu.create.content.tpl' in 'nav_content.tpl'' in /home/u781268470/public_html/blogs/engine/lib/external/Smarty/libs/sysplugins/smarty_internal_templatebase.php:127 Stack trace: #0 /home/u781268470/public_html/blogs/engine/lib/external/Smarty/libs/sysplugins/smarty_internal_template.php(288): Smarty_Internal_TemplateBase->fetch(NULL, NULL, NULL, NULL, false, false, true) #1 /home/u781268470/public_html/blogs/templates/compiled/blissplus/869c4bbb68ff139bcd11d959ca2554329c9aff08.file.nav_content.tpl.php(27): Smarty_Internal_Template->getSubTemplate('menu.create.con...', NULL, NULL, NULL, NULL, Array, 0) #2 /home/u781268470/public_html/blogs/engine/lib/external/Smarty/libs/sysplugins/smarty_internal_templatebase.php(180): content_56c1d9ca81f1b2_91951940(Object(Smarty_Internal_Template)) #3 /home/u781268470/public_html/blogs/engine/lib/external/Smarty/libs/sysplugins/smarty_internal_template.php(288): Smarty_Internal_TemplateBase->fe in /home/u781268470/public_html/blogs/engine/lib/external/Smarty/libs/sysplugins/smarty_internal_templatebase.php on line 127
avatar
Попробуйте в файле "/plugins/filearchive/templates/skin/default/actions/ActionFile/add.tpl" заменить строку:
{if Config::Get('view.skin') == 'social' || Config::Get('view.skin') == 'mobile'}

на строку:
{if Config::Get('view.skin') == 'social' || Config::Get('view.skin') == 'mobile' || Config::Get('view.skin') == 'blissplus'}
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.