{"id":14293,"url":"\/distributions\/14293\/click?bit=1&hash=05c87a3ce0b7c4063dd46190317b7d4a16bc23b8ced3bfac605d44f253650a0f","hash":"05c87a3ce0b7c4063dd46190317b7d4a16bc23b8ced3bfac605d44f253650a0f","title":"\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 \u043d\u0435 \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0432 \u043d\u0438 \u043a\u043e\u043f\u0435\u0439\u043a\u0438","buttonText":"","imageUuid":""}

Focus: часть 2 или как мы управляем данными

На связи Миша Дадаев, techlead АЭРО, и мы продолжаем рассказывать про нашу админку Focus.

Примеры реализации задач

Давайте рассмотрим работу системы на примере с некоторыми из сервисов Focus, например: delivery, content и catalog. Ниже по каждому сервису обозначены желаемые действия по управлению данными:

Для реализации заявленных функций нам потребуются установить плагины согласно схеме ниже. Важно отметить, что плагин media может как использоваться в качестве самостоятельного хранилища файлов, так и взаимодействовать с другими плагина сервиса. Например, если необходимо к баннеру загрузить изображение.

Итак, чтобы сервис подключился к Focus админ, необходимо выполнить 2 условия:

  • Должен быть реализован healthcheck GET /api/v1/admin/health/check
  • На сервис должен быть установлен хотя бы один плагин

Конфигурация

В случае сервиса delivery, устанавливаем плагин configurations, и в результате появляются необходимые эндпоинты. Подобным же образом потребуется установить плагины для каждого сервиса. Далее, через задание переменных окружения, нужно внести информацию о сервисе в конфигурацию admin-connector, чтобы он понимал как с ними работать.

Например, мы хотим управлять тремя настройками доставки: e-mail для обратной связи, количество дней хранения заказа в ПВЗ и максимальный вес посылки в килограммах. В терминах Focus Admin группа этих трех настроек и является конфигурацией.

После этого можно редактировать все значения конфигурации в едином окне.

Меню и медиа

Следующим шагом для сервиса контент устанавливаем плагин menu, где создаем тип меню и добавляем нужные нам пункты. Можно создавать множество разных меню, вкладывать пункты друг в друга и задавать для них дополнительные опции (например, цвет). Еще одним простым и понятным плагином является media. Он интегрируется с s3-совместимым хранилищем и позволяет производить операции с файлами и папками.

Модели

Плагин модели позволяет дать доступ к управлению данными в таблицах баз данных, к которым мы захотим его выдать. С помощью этого плагина можно также сделать сортировку в списке элементов и выдать доступ только к выборочным колонкам. Это позволяет управлять записями в таблицах совершенно разных сервисов:

  • загружать баннеры в контентном сервисе;
  • редактировать популярные местоположения в сервисе гео;
  • управлять SEO-описаниями для разделов в сервисе каталог
  • и т.д.

Теги позволяют хранить meta-информацию о полях структуры прямо в коде, не используя никакие персистентные хранилища. Дополнительным бонусом является то, что свой тег без особых усилий может написать любой разработчик. Мы решили, что будем использовать тег focus, который будет хранить информацию о настройках полей в CMS.

Давайте представим, что у нас есть структура brand со следующими полями:

  • id
  • название
  • символьный код
  • логотип
  • текстовое описание

В коде сервиса, написанного на Go, она может выглядеть следующим образом:

Чтобы данными этой структуры можно было работать в Focus, нужно добавить настройки полей, используя тег focus

Пример для нашей бренд зоны с использованием тега focus будет выглядеть так:

Как показано в примере, для части полей можно выставить специальную настройку — disabled. В этом случае просматривать значение поля в Focus можно, а вот изменять значение не получится. Данный прием полезен, когда записи загружаются из внешнего источника, и мы хотим позволить изменять только дополнительные поля.

Другим полезным значением являются настройки “-” и hidden:list — первая полностью скрывает поле из админ-панели, а вторая скрывает из списка.

Чтобы управлять тем, как Focus будет отображать поле используется настройка view. Если ее не указывать, Focus будет опираться на тип поля. В нашем примере мы хотим, чтобы поле Content редактировалось через визуальный редактор view = editorJs. Более подробно обо всех возможных настройках тега focus можно почитать на странице документации.

В итоге мы получаем следующий интерфейс управления в админ-панели:

Естественно, бывает, что перечисленного функционала недостаточно, но Focus — это расширяемая система, расширение которой происходит за счета разработки новых плагинов на backend и на frontend. За основу обычно можно взять функционал плагина модели и дописать кастомную логику.

Сейчас основное количество плагинов написано на Golang — этот язык программирования мы чаще всего используем при разработке проектов на сервисной архитектуре. Однако, backend может быть переписан на другой технологический стек (например C#), при этом frontend остается без изменений.

Вместо заключения

При разработке Focus Admin мы стремились к тому, чтобы наша система представляла собой уникальное решение на рынке, полностью закрывающее потребности наших клиентов по части управления контентом на сайте. Наша CMS имеет несколько отличительных особенностей:

  • Универсальность. Это коробочное решение, подходящее для любого проекта;
  • Гибкость. Если требуется специфический контент для сайта, то можно разработать под него кастомный плагин;
  • Скорость внедрения. Поскольку Focus это low-code система, управлять контентом и настраивать модель сайта можно за считанные минуты;
  • Мультиязычность. Focus работает с любым языком программирования;
  • Безграничность. У CMS нет лимита по кол-ву подключенных сервисов.

На текущий момент проект находится в стадии активного развития. Мы стараемся постоянно делать его удобнее, стабильнее и функциональнее. Несмотря на то, что проект еще молодой, он уже позволяет закрывать 70-80% потребностей по администрированию данными проекта, при этом экономя достаточное количество ресурсов разработки.

0
Комментарии
-3 комментариев
Раскрывать всегда