Как прикрепить изображение к комментарию
Как реализовать такие комменты:
fishspace.ru/places/to/venevskij/platnik-vorotnya/
fishspace.ru/places/to/venevskij/platnik-vorotnya/
Комментарии: 27
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
1. Немного модернизируем js файл от тикетс (точнее делаем копию оригинального и указываем путь к нему в настройках), мой файл
fishspace.ru/assets/components/tickets/js/web/fish_default.js
мои изменения отмечены комментариями // FishSpace
2. в форму добавления комментария добавляем код ниже textarea
В момент написания комментария прикрепленные фотки вставляются внутрь commentImagesPanel (и соответственно у пользователя есть предпросмотр их), а в момент нажатия кнопки «написать комментарий» — html код с комментарями добавляется в textarea (это делает скрипт из п.1) и все отправляется на сервер.
3. На ссылку commentImagesUpload нужно повесить ajax загрузчик файлов, у меня так:
функция ImageUpload у меня довольно навороченная и приводить ее код не буду. Суть ее в том, что бы показать всплывающее окно, которое позволит выбрать файл и загрузить его на сервер. На сервере скрипт загружает картинку, делает для нее превью, и возвращает ответ в json:
В общем такой костыль у меня прикручен.
У самого реализована связка загрузки изображений с ms2gallery-загрузчиком посредством очень топорного костыля, поэтому вопрос крайне актуален..)
1. В низу страницы есть код скрытой формы, эта форма отображается при помощи fancybox при загрузке картинки.
2. В форме есть input type=file, загрузка файлов идет по одному
3. Сама форма отправляется на сервер через ajax (jquery forms)
4. На севере висит php скрипт файл сохраняет и выдает в ответ сформированный html код со ссылкой на картинку и маленьким превью.
cfgAllowTagParams
cfgAllowTags
Дописать тег div
— только, насколько я понимаю, в данном способе тег выводится не в теле комментария (где текст), а в общем шаблоне комментария под ним с подцеплением результатов на лету.
Надо только добавить плагин, который буде срабатывать после сохранения комментария (событие — OnCommentSave). Вообще очень много открыл для себя с этими плагинами =) В таблице компонента меняю поле parent на id созданного комментария.
В чанке формы добавления комментария надо добавить сам сниппет ufForm:
В чанке одного комментария(tpl.Tickets.comment.one.auth) добавить:
Должна быть включена поддержка fenom в настройках pdotools.
Будет работать только для авторизованных пользователей, так как их id мы заполняем в parent таблицы компонента UserFiles.
Ты получаешь все файлы юзера по его user_id, соответствующему свойству parent:
Потом, ты у каждого файла перезаписываешь его parent, то бишь user_id, на id нового комментария:
Почему это плохо? Потому что юзер, чей id совпадает с id нового комментария, который ты напишешь, будет иметь доступ к тем фоткам, которые были добавлены в этот комментарий тобой. А ты доступа к этим фоткам уже не имеешь, по сути, ибо parent (читай user_id) файлов, которые были тобой загружены, уже не соответствует твоему user_id.
В tpl.Tickets.comment.form вызываем форму загрузки файла:
Важный момент, который ты почему-то не упомянул:
Чанк uf.form переписываем так, чтобы там не было тега form (заменяем его на div):
Не знаю, насколько это правильно, но работает. :)
В tpl.Tickets.comment.one.auth и tpl.Tickets.comment.one.guest прописываем вывод файлов комментария:
И плагин будет выглядеть так:
Костыльно, признаю… но другого ничего в голову не пришло. Помоему, просто с текущей версией UserFiles никак по другому не реализовать прикрепление изображений к комментариям.
— Обновлено --
Данная реализация разбивает файлы по группам comment-[[+id]], что позволяет более проще получить к ним доступ в бекенде на странице UserFiles или на вкладке UserFiles страницы редактирования юзера.
Про замену тэга form на div действительно забыл упомянуть, важный момент без которого работать не будет.
UPD: Возможно, лучше джоинить изображения, чем вызывать в каждом комментарии pdoResources или расширить таблицу комментариев, чтобы в ней хранилась информация о том, есть ли у комментария прикрепленные файлы.
(это не говоря о том, что я предложил вариант и без джоинов, но с доп. проверкой для избежания лишних запросов)
А зачем тебе второй аккаунт тут?)
Не за что.)
В плейсхолдере thumbs получаю строку с картикками через запятую. Теперь осталось только сделать сниппет который будет обрабатывать эту строку.
Когда оставляю коментарий картинки не подгружаются сразу, надо обновить страницу, чтобы пути появились под комментом.
Как можно сделать чтобы они подгружались сразу?
P.S. Спасибо за GROUP_CONCAT()
core/components/tickets/model/tickets/tickets.class.php
Если использовать феном, то можно обойтись и без сниппета:
Обожаю феном=)
После редактирования уже начинают появляться проблемы…
При редактировании прикрепленные фотографии не отображаются, почему?
потому что при этой записи:
Форма Добавления комментария и Форма редактирования комментария ведут себя по разному…
Форма комментария получается записывает (соответственно и сниппет отрабатывает) все это дело как:
А форма редактирования, вот так:
И получается чехарда, сохраняю (формой редактирования), получается, что в базу (а именно в поле LIST) улетает:
И при этом комментарии начинают глючить и тупить, а так же файл остается висеть, т.к. теперь у него назначно в LIST:
Если есесна я назначу ему принудительно, например так:
То есесна как только я захочу отредактировать этот комментарий, то все чики пуки, файлы отображаются, перезагружаются, удаляются или загружаются новые именно к этому комменту!
Помогите пожалуйста понять, сделал все как описано именно в этой теме! Заранее огромное спасибо!
А то у меня пишет доступ запрещён.
web
Member — 9999
UserFilesPolicy