ms2form - форма для публикации продукта minishop2
Всем привет, я написал дополнение к minishop2, позволяющее публиковать и редактировать товар, не заходя в админ. панель modx. Выглядит, оно вот так

Я написал это дополнение для своего домашнего проекта и особенности реализации не позволяют опубликовать его как есть, предлагаю их обсудить, а также скинутся на доработку дополнения.
Дополнение состоит из трех частей каждая из которых может быть полезна по-своему.
Форма публикации и редактирования ресурса.
Реализовано:
Поддержка тегов и мультикатегорий minishop2, есть возможность выбрать шаблон и привязать свои tv к шаблону.
Поддержка загрузки msProductFiles с drag and drop.
Я заменил редактор markItUp на bootstrap-markdown чтобы было удобнее редактировать большие документы. Контент набирается c помощью markdown синтаксиса, но сохранятся в html формате. При редактировании документа контент снова кодируется в markdown разметку.
Не хватает:
Нет совместимости с последними версиями modx и minishop2.
Изображения и превью изображений не сохраняются на диск, а загружаются сразу в google drive.
Источник файлов (media source) для google drive.
Хранение большого количество фото в google drive показалось мне хорошей идеей в свете того что google не ограничивает дисковое пространство для хранения фотографий. Я доработал media source адаптер для google drive, который нашел в сети. Есть возможность создавать папки, а также загружать и удалять файлы как из админ. панели так и из ms2form.
Я рассчитывал на то что превью изображений будут генерироваться на лету c помощью google drive сервиса, но это оказалось верно лишь отчасти, так как ссылки на превью от этого сервиса доступны только в течение нескольких часов.
Асинхронный менеджер задач
Генерировать превью картинок на сервере мне все-таки не хотелось, поэтому я воспользовался возможностью синхронизировать загруженные в google drive изображения с google photos и picasa web albums.
Проблема оказалась в том что фото синхронизируется с ощутимой задержкой, а также, синхронно и это занимает слишком много времени. Поэтому я написал простой и удобный менеджер задач для modx на основе react. Он позволяет синхронно или асинхронно запускать процессоры modx с заданными интервалами времени.
Также этот менеджер задач можно использовать как альтернативу cron для запуска процессоров modx по таймеру или выполнения их асинхронно.
Это менеджер в итоге позволил мне хранить все галереи изображений minishop2 в google photo/picasa и получить превью, которые можно генерировать на лету в зависимости от параметра в url.
Ограничения:
Есть ограничение на размер изображений они не должны превышать размер 2048 х 2048 пикселей и должны быть больше чем 520px x 520 px.
Самое большое ограничение состоит в том что несмотря на всю соблазнительность программирования на php в асинхронном стиле, shred хостинги слабо подходят для этого. React сервер должен быть запущен в режиме командной строки, но функции отвечающее за это обычно заблокированы из соображений безопасности, это можно сделать вручную, но все равно остается проблема с функциями для работы с сокетами которые, тоже, часто блокируют (через сокеты реализована передача параметров от сервера к процессорам modx)
Не хватает:
Нужно реализовать работу галереи изображений без асинхронного сервера в условиях shared хостинга а, это, или генерация превью на сервере или новый источник файлов для работы с picasa web albums напрямую, но идея писать источник только для изображений мне не очень по душе.
Нет совместимости с последними версиями modx и minishop.
Итак, интересно ли вам такое дополнение?
В порядке увлечения сложности разработки у меня выходят следующие варианты для стандартного хостинга:
Компонент в магазине modstore.pro
p.s. сайт для которого я написал это дополнение.
Я написал это дополнение для своего домашнего проекта и особенности реализации не позволяют опубликовать его как есть, предлагаю их обсудить, а также скинутся на доработку дополнения.
Дополнение состоит из трех частей каждая из которых может быть полезна по-своему.
Форма публикации и редактирования ресурса.
Реализовано:
Поддержка тегов и мультикатегорий minishop2, есть возможность выбрать шаблон и привязать свои tv к шаблону.
Поддержка загрузки msProductFiles с drag and drop.
Я заменил редактор markItUp на bootstrap-markdown чтобы было удобнее редактировать большие документы. Контент набирается c помощью markdown синтаксиса, но сохранятся в html формате. При редактировании документа контент снова кодируется в markdown разметку.
Не хватает:
Нет совместимости с последними версиями modx и minishop2.
Изображения и превью изображений не сохраняются на диск, а загружаются сразу в google drive.
Источник файлов (media source) для google drive.
Хранение большого количество фото в google drive показалось мне хорошей идеей в свете того что google не ограничивает дисковое пространство для хранения фотографий. Я доработал media source адаптер для google drive, который нашел в сети. Есть возможность создавать папки, а также загружать и удалять файлы как из админ. панели так и из ms2form.
Я рассчитывал на то что превью изображений будут генерироваться на лету c помощью google drive сервиса, но это оказалось верно лишь отчасти, так как ссылки на превью от этого сервиса доступны только в течение нескольких часов.
Асинхронный менеджер задач
Генерировать превью картинок на сервере мне все-таки не хотелось, поэтому я воспользовался возможностью синхронизировать загруженные в google drive изображения с google photos и picasa web albums.
Проблема оказалась в том что фото синхронизируется с ощутимой задержкой, а также, синхронно и это занимает слишком много времени. Поэтому я написал простой и удобный менеджер задач для modx на основе react. Он позволяет синхронно или асинхронно запускать процессоры modx с заданными интервалами времени.
Также этот менеджер задач можно использовать как альтернативу cron для запуска процессоров modx по таймеру или выполнения их асинхронно.
Это менеджер в итоге позволил мне хранить все галереи изображений minishop2 в google photo/picasa и получить превью, которые можно генерировать на лету в зависимости от параметра в url.
Ограничения:
Есть ограничение на размер изображений они не должны превышать размер 2048 х 2048 пикселей и должны быть больше чем 520px x 520 px.
Самое большое ограничение состоит в том что несмотря на всю соблазнительность программирования на php в асинхронном стиле, shred хостинги слабо подходят для этого. React сервер должен быть запущен в режиме командной строки, но функции отвечающее за это обычно заблокированы из соображений безопасности, это можно сделать вручную, но все равно остается проблема с функциями для работы с сокетами которые, тоже, часто блокируют (через сокеты реализована передача параметров от сервера к процессорам modx)
Не хватает:
Нужно реализовать работу галереи изображений без асинхронного сервера в условиях shared хостинга а, это, или генерация превью на сервере или новый источник файлов для работы с picasa web albums напрямую, но идея писать источник только для изображений мне не очень по душе.
Нет совместимости с последними версиями modx и minishop.
Итак, интересно ли вам такое дополнение?
В порядке увлечения сложности разработки у меня выходят следующие варианты для стандартного хостинга:
- форма редактирования товаров с сохранением изображений и файлов и генерацией превью на сервере
- форма редактирования товаров с сохранением изображений и файлов в google drive и генерацией превью на сервере
- форма редактирования товаров с сохранением только изображений в google photo/picasa и генерацией превью там же
Компонент в магазине modstore.pro
p.s. сайт для которого я написал это дополнение.
Комментарии: 42
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
у меня посложнее, потому что я добавил поддержку навигации по истории браузера и мне пришлось учесть отступ который появляется из-за фиксированного меню наверху сайта
не подскажите с чем это связано?
вызываю так
Стандартные bootstrap стили нужно подключить вручную
Добавлено новое свойство redirectPublished — [new|0|id] Перенаправлять на new — на вновь созданный ресурс, 0 — не перенаправлять, id — на ресурс с указанным id.
Поле content теперь может быть необязательным для заполнения.
Или совсем удалять ресурс.
Недавно заметил одну проблему, при редактировании уже созданного ресурса в поле Описание текст подгружается вместе со всеми html-тегами, и при пересохранении эти теги никуда не исчезают… Это только у меня так? Или где-то недоглядел?
Код вот такой:
Вам удалось её решить?
На какой редактор сменили, у меня что-то путного ничего не получилось
сниппет ms2form -> закомментируй $value = htmlentities($value, ENT_QUOTES, $charset);
Вы все сделали по документации
docs.modx.pro/komponentyi/minishop2/drugie-dopolneniya/ms2form#%D0%92%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8
— добавили это поле в allowedFields, создали корректно html для него в форме?
Если да то следующим шагом предлагаю просто для проверки на время отказаться от чекбоксов и вывести их значения в обыкновенный инпут типа текст.
К примеру если это стандартное поле (скрыть из меню) то в нем лежит либо 0 либо 1. Если руками изменяете значение в форме на 0 или 1 — сохраняется? (в адмике галочка показывать в меню то появляется то нет)
Если при использовании обычного инпута работает, то скорее всего автором этого компонента не предусмотрено использования именно чекбоксов, ведь они имеют специфическую логику, если чекбокс не отмечен, то данное значение вообще не передается на сервер.
Вот по этой ссылке в разделе note
developer.mozilla.org/en-US/docs/Web/HTML/Element/input/checkbox
предлагается решение, как обеспечить передачу чекбокса, если он не выбран (создание скрытого инпута с таким же именем).
Тоесть суммирую. На мой взгляд все должно быть примерно так
1. Добавили свой TV у которого значения могут быть 0 или 1
2. Привязали его к шаблону товара
3. Добавили его в allowedFields вызова сниппета
4. Создали html для него в форме. В качестве value используете значение этого TV, а также вам нужно будет решить самостоятельно вопрос с атрибутом checked. На fenom это было бы примерно так
5. Создать скрытый инпут