Привет.
Я пытаюсь сделать custom TV input для работы с файлами в админке. Что-то типа Assets Manager, но TV. Проблема в том, что я дизайнер, а не программист, и чтобы сделать всё по уму, нужна помощь труъ программиста.
Сейчас есть кастомный TV. Внутри dropzone.js и jquery. Можно загружать файлы в указанную папку, удалять их, просматривать загруженные. Файлы можно сортировать, добавлять к ним описание – эта инфа хранится в TV в JSON'е.
?
В настройках ТВ можно указать папку с использованием плейсхолдеров [year], [month], [day], [id]. То есть вы можете создать несколько ТВ, которые будут грузить файлы в разные папки. Например: /assets/lib/[id]/images/ и /assets/lib/[id]/files/. Там же задаются типы файлов для загрузки, максимальный размер и настройки для ещё одной фишки: вставки в TinyMCE (собираюсь прикрутить и другие редакторы). По двойному клику на загруженном файле он вставляется в TinyMCE по заданному шаблону. Шаблоны разные для разных типов документов.
?
Кроме того есть сниппет для вывода файлов и шаблон для этого сниппета.
Всё работает, кроме одного и главного. Assetstv.tpl (шаблон TV) посылает запросы upload.php. Upload.php грузит, удаляет и отображает существующие файлы, но он НЕ ИМЕЕТ НИКАКОЙ ЗАЩИТЫ.
Насколько я понял, нужно копать в сторону коннкторов и процессоров. Так же вроде как есть процессор browser, который может быть полезен. Может быть есть какая-то дельная статья про процессоры и коннкторы, в идеале на русском. Могу ли я как-то использовать стандартные средства MODX для загрузки/удаления файлов? Как создать коннектор/процессор? Какие проверки производить кроме прав пользоваетеля на загрузку/удаление файлов?
По-моему, штуковина получается довольно полезная, но раз дело касается безопасности, вероятно, дилетант должен уступить место профи. Очень надеюсь на помощь тех, кто может допилить мой код или просто посоветовать куда и как копать дальше. Кроме того, было бы неплохо услышать какие-то отзывы о том, что получилось. Не фигнёй ли я страдаю? :-)
http://dyranov.ru/assetstv-0.1-alpha.transport.zip — Транспортный пакет, из того, что удалось сделать.
Только что зарегистрировался, надеюсь написал куда надо.
Денис, хорошее дело делаете! Поднял вам права до Члена Клуба.
По безопасности: вы можете использовать системные привилегии:
?
Допустим, вам надо проверить права на загрузку. Пишете if($modx->hasPermission('file_upload')){.....}.
Можно и системные процессоры заюзать.
У вас там мультиаплоэд есть?
Я думаю, что на недельке этой подключусь к доработке вашего модуля, только вылейте его на гитхаб вместе с собирающими скриптами.
Отклик! Ура! Я уж и не ждал, но, видимо, просто выходные.
Как раз эти привилегии я и хотел использовать. Строчку с hasPermissions тоже видел. Но обратите внимание на третье предложение в тексте — я ни разу не программист. :-)
Мультиаплоад есть. Там, на мой взгляд много полезного есть и будет ешё больше. Думаю сделать custom output, котоый будет выдавать первую картинку из списка загруженных файлов. Может даже набор таких аутпутов на разные случаи. По поводу вставки в RTE куча идей. Опять же поддержку разных RTE нужно сделать. Я так, может быть не скромно, надеюсь, что этот модуль возьмёт на себя всю работу с файлами для конетнт менеджера. Не нужен ни браузер модикса, ни галлереи, ни FileLister какой-нибудь. Плюс расширение возможностей RTE.
Но пока я вынужден несколько притормозить с этим. На то, что сделано ушло 2 недели. Пора и денег подзаработать. То есть заниматься этим модулем дальше очень хочется и руки чешутся, но в данный момент из-за проблем в безопасности он просто бесполезен, а на исправление этих проблем у меня уйдёт уйма времени. Сейчас я уперся в эти коннекторы/процессоры и не смог найти статьи популярно объясняющей как с ними работать. Общий принцип ясен вроде как, но что конкретно можно написать и куда их положить? И как MODX поймёт, что это вот — коннектор, а это — процессор. Пока понял, что надо бы разобраться с ООП (тут у меня вообще минимум знаний). В итоге, увидел на форуме MODX цифру в почти 50 тысяч участников и решил, что среди них может найтись хоть один, кто поможет доделать дополнение, которое может стать полезным для всех, но вы вот первый кто ответил.
Ну и, конечно, гитхаб для меня сейчас — это такой странный сайт куда люди как-то выкладывают код. Какие-то команды в консоли. Как всем этим пользоваться представляю плохо. Кое как собрал всё в пакет Пакманом, чтоб люди не мучались с раскладыванием файлов по папочкам. Я до этого написал taxonomyTV custom input. Тот вот пока и до сборки в транспортый пакет не дошёл :-). Если интересно он тут: dyranov.ru/2015/02/taksonomiya-v-modx-revo-custom-tv-input/ Ещё есть хак TinyMCE для introtext. И это, практически, весь мой опыт программирования :-)
Похоже, я не туда ответил :-)
Ничего страшного, уведомление в любом случае придет, просто не об ответе, а о том, что есть новый коммент в теме, где я принимал участие.
Сейчас я уперся в эти коннекторы/процессоры и не смог найти статьи популярно объясняющей как с ними работать.
С пакетом установочным понял. ОК, сам добавлю. На недельке возьмусь.
Я нашёл эту статью вчера. Понял, что если долго мучаться, то процессор я смогу написать. Но про коннекторы ничего толком не нашёл, а начинать, похоже, нужно именно с них. Кроме того я не нашёл примеров работы с файлами/папками через modx api. Хотя, возможно, уже плохо искал. Так что вот вам тема для очередной статьи :-)
Спасибо. Надеюсь, с вашей помощью эта штука станет хитом modx.com/extras :-)
Про коннекторы писать практически нечего, хотя наверняка я что-нибудь да писал. Смотрите коннекторы в любом компоненте и все.
Что-то у вас иконки огромные при загрузке файлов в дропзону: joxi.ru/12M1KMNhnXlK2J
Или что-то не загрузилось из-за кривого транспортного пакета (скорее всего), или не допилена вёрстка, или в браузере криваяя поддержка svg. У вас браузер какой? Какой версии? У меня в хроме и ФФ работает. В ИЕ не проверял.
Уж ослом я точно не пользуюсь :)
Нет, дело не в браузере точно. Этим элементам атрибуты height и width устанавливаются бешенные. Если вручную через fireBug подправить их, иконки становятся нормальными. Явно косяк в скрипте где-то.
Height и width css'ом выставляются нормальные. Этого css'а я на вашем скрине не вижу. Что-то не догрузилось. Консоль браузера должна ругаться. Скорее всего не обрабатывается dropzone-assetstv.css из core/components/assetstv/
Возможно, нужно всю папку assetstv из транспортного пакета (modCategory/baa914c9c3f0627ef24dab354226a751/0/) перенести в core/components/ руками :-(
JS-ы и прочая статика в core?? joxi.ru/Y2LjLVESOeO8r6
core должна быть закрыта для запросов извне (и у меня, как положено, закрыто).
Все верно, запросы не проходят.
«NetworkError: 403 Forbidden — ........./core/components/assetstv/dropzone-assetstv.css»
Вот и ещё косяк. Но мне казалось логичным, что админское — где-то в core или manager, а в assets — пользовательское.
dyranov.ru/assetstv.tpl — вот исправленный файлик из /manager/templates/default/element/tv/renders/input/. Теперь всё ссылается на /assets/components/assetstv/
В manager еще куда не шло (админка же в manager). Но никак не в core.
То есть php-файлы и т.п. — в core, а внешнюю статику (картинки, JS-ы, CSS-ы и т.п.) — это не в core.
Пока не до того?
Там некоторые вещи на мой взгляд совсем не по фэншую были и без танцев с бубнами не запускалось. Но главное — не подходило под мои задачи. В итоге сделал это.
Что именно «не по феншую»? То, что оно сейчас требует танцев с бубнами — это понятно. Вы, как мне видится, сделали файловый менеджер вид сбоку. Я пытался отказаться от файлового менеджера по нескольким причинам: Нужно думать о путях сохранения (от них вы, вдимо, избавились). Он своим модальным окном перекрывет контент. Куча лишних кликов: вставить картинку -> диалог TinyMCE -> открыть ФМ -> кнопка загрузить -> диалог загрузки -> загрузка -> и ещё выбрать нужное и вставить. При этом начальное действие определяет дальнейшие: если мне нужно вставить ссылку на файл, то уже не вставку картинки я должен выбирать в начале. В моём варианте драг'н'дроп в зону и даблклик для добавления. Кроме того шаблон добавления у меня зависит от типа файла. Кроме того в дальнешем оно научится вставлять картинки с fancybox, например. Или какой-то слайдер изображений. Кроме того, пока не знаю как, но можно подобным образом реализовать добавление чего-то отличного от файлов — карты, шаблоны разметки для какой-то области контента, видео с ютуба. Всё это будет жить рядом с областью контента и расширять её. То есть это не столько файловый менеджер я пытаюсь сделать, сколько медиа-панель для tinyMCE. Так что я не понимаю, что не по феншую?
Что именно «не по феншую»?
Ну, как минимум статика (JS, CSS, картинки) в core/… Эта папка должна быть закрыта для запросов извне. Это должно лежать в manager/assets/… или manager/components/…
Есть еще моменты, но я не готов их сейчас все изучать и перечислять. Это чисто технические, а не интерфейсные/юзабилити.
Вы, как мне видится, сделали файловый менеджер вид сбоку.
Пусть вам это видится так, я не против.
Куча лишних кликов: вставить картинку -> диалог TinyMCE -> открыть ФМ -> кнопка загрузить -> диалог загрузки -> загрузка -> и ещё выбрать нужное и вставить.
Нет. У меня это двойной щелчок в поле (или ПКМ -> Изменить картинку). Появляется окно загрузки новой или выбрать имеющуюся.
?
Если загрузить новую, то сразу системное окно выбора файла на компьютере. Выбираешь — сразу загрузка и применение окну. Если выбрать — то файловый манагер с картинками, двойной щелчок — картинка выбрана, окно закрыто.
У нас разные задачи стоят, потому и реализация будет сильно отличаться.