Поиск

Привет, Гость

Войти
Идентификация
Я забыл свой пароль
Регистрация

Боюсь, что если я так и продолжу стареть каждый год, непременно как-нибудь окочурюсь. Надо поаккуратнее с этой фигней.

СтатьиСтатьиОбновления ReloadCMS → Загрузка в статью картинок с помощью AJAX

Вставка картинок на сайт без перезагрузки страницы

Задача написания Аяксового загрузчика встало передо мной неожиданно - получил заказ на сайт со множеством картинок в статьях.

Вместо тупой механической работы решил облегчить жизнь себе и людям - написать загрузчик картинок в статью.



Решение начинается с постановки задачи.

Что есть на сегодняшний день?

Сейчас в ReloadCMS 1.2.7 картинки на сайт грузятся с помощью ссылки "Загрузка файлов" в админке.



JPG



Решение от Greenray в 1.2.8 - 1.3beta, который первым в ReloadCMS-сообществе реализовал фичу загрузки в статью и комментарии, очень хорошо, но не подошло мне по следующим причинам:



1. При добавлении картинки страница перезагружается целиком.

А значит статью где-то промежуточно нужно сохранять. Если сервер окажется в этот момент недоступен, статья пропадёт целиком.

AJAX использовать сложнее, но зато результат - более приемлем:

- На сервер меньше нагрузка (для файлового движка - важно!);

- Меньше траффик;

- Весь текст статьи хранится у пользователя, и если у него пропало электричество - сам виноват, мы ни при чём (шутка).

2. Разрешение загрузки картинок в комментарии к статьям является, по-моему, ошибкой. Если это разрешать, то только для Редактора статей или админа.

3. Вынесение загруженных файлов из единой папки uploads - тоже, по- моему, ошибка. В 1.2.9 загруженные в статью файлы хранятся в папке статей, и могут быть стёрты при удалении статьи. Или у неё изменится адрес при переносе статьи между категориями. Например, я люблю публиковать статью не сразу, а сохранять в черновиках и дорабатывать со временем. При переносе статьи меняется и адрес картинок.

А если на картинку поставили ссылку? А если она применяется в нескольких статьях? А как исключить сжатие картинок, особенно больших, при архивации данных (у меня папка uploads исключена из архивации)? Больше вопросов, чем ответов.



Поэтому я решил оставить это как есть, в будущем году при переработке движка добавив сортировку загруженных файлов - по алфавиту, размеру и по времени закачки. Возможно добавление времени создания в линукс-формате в начало файла. Пока не решил, буду решать в марте 2011г.



4. Ну и самый главный аргумент: загрузка средствами AJAX - это круто, модно и кошерно.



Поэтому отметаем всё и делаем с нуля.



Что нам надо получить в итоге?



Опишем порядок работы идеального загрузчика:

1. Заходим в админку, жмём "Публикация статьи".

2. Пишем статью, время от времени подгружая картинки в нужные места.

3. Если адрес хоста, загружающего картинку, не совпадает с вашим - стереть бяку и вывести ошибку (привет хакерам!).

4. Проверка картинок, по расширениям (jpg,png,gif). Jpeg - расширение отметаю как устаревшее, потому как за 2 последних года не встречал.

Если загруженное - не картинка, вывести ошибку и стереть загруженную гадость.

//upd - картинки можно ещё проверять по внутреннему содержанию средствами PHP, а не только по расширениям - добавим позже и эту защиту!

5. Ссылка на картинку должна вставляться в поле ввода текста, в конец его.

6. Если название файла на русском (а бывают и такие товарищи), переводить в латиницу.

7. Если файл большой и долго загружается - показать процесс загрузки.



Собственно, всё кроме п.7 и реализовано в модуле загрузки картинок.



Поэтому он, конечно, не идеален. Но вполне работоспособен.

Ссылка на скачку.

Установка на сервер - распаковать и залить по ФТП.

Пока замеченный баг - ошибки загрузки картинок пишутся прямо в текст статьи. Точнее это не баг, а просто я не придумал куда их писать-то ещё?

//upd Ещё хорошее решение я видел здесь.

Там вообще чел грузит файлы пачками, с использованием jQuery

Но он (пока) нам не подходит, т.к. некорректно работает с русскими однобайтными кодировками.
Дата 2010-10-09 14:17:32

Комментировать

Вы не залогинены!

Комментарии

admin 2010-10-13 20:55:31
denis
Цитата:
Простите за многословия - все мои замечания это вовсе не критика
Да всё нормально, идёт рабочее обсуждение. И в критике не вижу ничего плохого - правильная критика помогает двигаться вперёд.
Конечно нужно добавить настройки архивации http://from...p;pid=30#30
Гость 2010-10-13 17:22:54
No avatar
Я понял что в этом дело.

К слову - в глючном и неудобном битриксе(вообще позор для платной системы) архивация предусмотрена автоматом в несколько частей, специально на ограниченное время исполнения скрипта.

Сейчас мне проще бекапить ВСЕ СРАЗУ весь сайт через админку хостинга, ибо картинки картинками, тексты текстами, но статья с иллюстрациями все-таки один цельный элемент по смыслу.

Простите за многословия - все мои замечания это вовсе не критика, а всего лишь простой отчет beta-тестера, ну может чуть-чуть пожеланий на будущее thank_you
admin 2010-10-13 15:02:22
denis
Цитата:
возвращения uploads в back-up
Это не планируется. Подправить возвращение uploads в back-up можете вручную, но сначала почитайте эту тему http://relo...5&pid=8
Когда делается архивация множества файлов, PHP может превысить разрешаемое время для исполнения, и сервер прервёт скрипт. По-умолчанию exec_time равно всего 30 сек.
За это время на старых сайтах с большим количеством информации не удаётся упаковать ещё и закачанные файлы. Поэтому uploads перенесён из папки contents, где он был первоначально, в корень. Как раз чтобы не сжимать его при бэкапе. При этом картинки галереи не исключены из архивации.

Back-up нужен на сайте, чтобы сохранять текстовый контент - его трудно, а подчас и невозможно восстановить. А картинки можно перезалить по-новой. Папка для хранения его всегда известна
winking
Текстовые файлы могут \"биться\" при большой нагрузке, т.к. в них идёт запись. А в картинки никто не пишет, поэтому бэкапить их незачем.
Гость 2010-10-13 13:23:00
No avatar
Вполне логично. Убедили. Будем ждать марта с надежной возвращения uploads в back-up ;)

jpg
admin 2010-10-11 09:41:12
denis
Цитата:
в крайнем случае выделить в контенте отдельную папку, в любом случае про своевременное удаление ненужных изображений пусть юзер сам не забывает.
Я против того чтоб \"юзер сам не забывал\".
1. Из папки uploads можно подхватывать загруженные файлы и повторно вставлять их в статью. При публикации статьи есть выбор \"Добавить ссылку на файл\".
2. Их можно просматривать и удалять из админки, кликнув \"Загрузка файлов\".
3. Можете сделать \"свой собственный лунапарк - с блэкджеком и шлюхами\", но о совместимости с последующими версиями придётся забыть.
Гость 2010-10-10 20:33:01
No avatar
Ok, Спасибо. ok
Цитата:
они становятся доступны в галерее, а я этого не хочу.
я тоже этого не хочу, поэтому и предлагаю сохранять иллюстрации к статьям в /content/gallery/ (но не в gallery/images), в крайнем случае выделить в контенте отдельную папку, в любом случае про своевременное удаление ненужных изображений пусть юзер сам не забывает.
Иллюстрации нужны статьям, а upload исключена из резервного копирования по вполне понятным причинам.

imply
admin 2010-10-10 01:47:09
denis
Цитата:
Формирование конечного адреса изображения не учитывает
если cms находится не в корне а в папке.
Учтем, спасибо.
Цитата:
ажется лучше сохранять эти изображения не в upload а в папку /content/gallery/
Не лучше. В папке uploads хранятся любые файлы, и изображения в том числе. Их никто не увидит, пока ссылку на него где-нибудь в статье не поставишь. Это мне и нужно.
Если грузить в галерею, они становятся доступны в галерее, а я этого не хочу.
Есть наработанные стандарты, и надо им следовать, иначе будет каша.
Гость 2010-10-09 19:50:04
No avatar
Уважаемый Den1xxx. Я протестил скрипт. Формирование конечного адреса изображения не учитывает
если cms находится не в корне а в папке. и еще, кажется лучше сохранять эти изображения не в upload а в папку /content/gallery/ (но не в gallery/images) - тогда после глобального восстановления сайта статьи останутся иллюстрированными.

Устал читать? Напиши! Или позвони +375 29 5344286. На связи по будним дням с 800 до 1700.