VueTools - универсальный компонент оформления админки в MODX 3

Как вы наверное знаете, какое то время назад, при разработке MiniShop3 я анонсировал использование VUE + PrimeVue в админке, Поддержка современных возможностей JS, и просто, чуть более современного внешнего вида нам не помешает. Идея была реализована во множестве виджетов минишопа и показала себя удачной.

Чуть позже мы договорились с ребятами из modstore о новой реализации всем известных компонентов и я занялся проработкой mSearch для MODX 3. Разумеется использовать старые интерфейсы не хотелось, и имея свежий опыт переноса на VUE, я решил сделать то же самое, что в MiniShop3.

Но тут возник вопрос. Неужели придется в каждом следующем компоненте тянуть заново весь используемый фронтенд стек. Конфликтов, конечно не будет, но получится бессмысленный рост количества файлов в проекте. Естественным образом родилось решение вынести все переиспользуемые компоненты в отдельный пакет, который будет зависимостью для всех моих будущих компонентов. Так на свет появился VueTools


Представляю вашему вниманию VueTools — базовый пакет, предоставляющий Vue 3 стек для компонентов MODX 3.x через ES Modules Import Map.

Назначение



VueTools решает проблему дублирования библиотек при использовании Vue 3 в нескольких компонентах MODX. Вместо того чтобы каждый компонент включал свою копию Vue, Pinia и PrimeVue, все они используют общие библиотеки из VueTools.

Преимущества



  • Единая версия библиотек — все компоненты используют одинаковые версии Vue, Pinia, PrimeVue
  • Меньший размер загрузки — библиотеки загружаются один раз и кэшируются браузером
  • Изолированные стили — PrimeVue стили не конфликтуют с ExtJS админки MODX
  • Готовые composables — useLexicon, useApi, useModx, usePermission для работы с MODX

Состав пакета


  • Vue 3 v3.5.x — Реактивный фреймворк
  • Pinia v3.0.x — State management
  • PrimeVue v4.3.x — UI компоненты
  • PrimeIcons v7.0.x — Иконки

Composables (хелперы)


  • useLexicon Работа с лексиконами MODX
  • useApi HTTP клиент для стандартного MODX API
  • useModx Доступ к глобальному объекту MODx
  • usePermission Проверка прав пользователя

Архитектура


VueTools использует Import Map — стандартную технологию браузера для разрешения ES Module импортов.

Плагин VueToolsManager срабатывает на событие OnManagerPageInit и регистрирует Import Map в head страницы:

{
  "imports": {
    "vue": "/assets/components/vuetools/vendor/vue.min.js",
    "pinia": "/assets/components/vuetools/vendor/pinia.min.js",
    "primevue": "/assets/components/vuetools/vendor/primevue.min.js",
    "@vuetools/useApi": "/assets/components/vuetools/composables/useApi.min.js",
    "@vuetools/useLexicon": "/assets/components/vuetools/composables/useLexicon.min.js",
    "@vuetools/useModx": "/assets/components/vuetools/composables/useModx.min.js",
    "@vuetools/usePermission": "/assets/components/vuetools/composables/usePermission.min.js"
  }
}

Как это работает



  • Плагин VueToolsManager (OnManagerPageInit) регистрирует Import Map в head (до ES modules)
  • Подключает CSS стили PrimeVue (изолированы .vueApp)
  • Ваш компонент (MiniShop3, mSearch) загружает ES modules
  • Браузер разрешает импорты через Import Map
Когда Vue компонент выполняет import { ref } from 'vue', браузер находит ключ vue в Import Map и загружает файл по указанному пути.

Изоляция стилей


PrimeVue стили изолированы с помощью CSS префикса .vueApp. Это предотвращает конфликты с ExtJS стилями админки MODX.
Все контейнеры Vue виджетов должны иметь класс vueApp:
<!-- В ExtJS панели или HTML -->
<div id="my-vue-app" class="vueApp"></div>
Важно: Без класса vueApp стили PrimeVue не применятся к вашим компонентам.

Для разработчиков


Если вы разрабатываете компонент MODX и хотите использовать Vue 3 + PrimeVue — подготовлена документация с примерами использования. Постарался пошагово расписать как правильно собрать собственный компонент для админки с использованием VueTools

Документация, конечно же сыровата, буду дополнять ее по мере появления вопросов.
Николай Савин
Вчера в 10:01
modx.pro
107
+3
Поблагодарить автора Отправить деньги

Комментарии: 2

Александр Туниеков
2 часа назад
0
Интересно. И самое интересное исходники. Посмотреть как все реализованно. Можно ссылку на исходники? Упс. Нашел исходники
    Мнда… Реализация неожиданная для меня.
    Во первых, нет переводов primeVue. То есть если использовать фильтры DataTable или Calendar, то они будут англискими. Посмотрел. В минишоп3 похоже фильтры DataTable не используются.
    Во вторых, хотел посмотреть реализацию лексиконов, чтобы наконец реализовать их у себя. Но лексиконы, как оказалось, просто берутся из стандартного js файла админки. То есть, для фронта это решение не подходит :-(.
    В третьих, usePermission тоже просто берет разрешения из window.MODx?.perm. То есть, все равно нужно реализовать безопасность на беке. usePermission только для информирования пользователя.

    Ну хотелось бы что-то более крутое. А так пользоваться можно, но не для меня :-).
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      2