Все о Pimcore

1fd4f0f38e1169a8555e1d029fb31e1b.png

Что это такое

Pimcore — мощная open‑source MDM (и не только) система, с которой у меня накопился немалый опыт. В компании SVK.Digital, в которой я являюсь техническим директором, мы занимаемся заказной разработкой и автоматизацией бизнеса и уже несколько лет внедряем Pimcore на крупных предприятиях. В этой статье я хотел поделиться своим опытом, познакомив читателя с возможностями этого приложения.

Мне даже немного обидно, что в рунете незаслуженно мало информации об этом замечательном продукте. Хоть его и можно обозвать неприличным словом low‑code в какой‑то мере, но мне даже как программисту нравится работать с Pimcore (дальше по тексту расскажу о важных для меня особенностях), да и простор для программирования огромный.

Система построена на популярном PHP фреймворке Symfony и позволяет использовать его в полную силу. Это важно — PHP программисту не придется изучать очередной велосипед, да и качество кода и системы выше, чем если бы команда системы пыталась изобрести все свое и «с нуля».

У Pimcore есть две версии — Community и Enterprise. Вторая, очевидно, платная. Но уверяю вас — бесплатной более чем достаточно, никаких ограничений базового функционала там нет: https://pimcore.com/editions. А если нужно что‑то особенное, это нетрудно дописать — в статье это тоже рассмотрим.

Какую задачу решает

Решает задачу централизованного управления данными, их контроля и обогащения. Самый простой пример: использование Pimcore в качестве (внезапно) PIM (Product information management) системы. Допустим у вас есть магазин, нужно где‑то агрегировать данные от поставщиков, заставлять копирайтеров придумывать описания товаров, переводчиков их переводить, загружать картинки, и чтобы потом ответственный человек это все дело проверил. Затем эти данные нужно отдавать в другие системы, например в витрины интернет‑магазинов.

Все это Pimcore может из коробки, имея еще какое‑то невероятное количество возможностей, часть которых мы сегодня и рассмотрим.

Но важно понимать, что на PIM все не ограничивается — никакой привязки к именно «продуктам» в системе нет, вы сами вольны создавать любые объекты с любыми полями и связями между ними, поэтому можно завести в нее в прямом смысле любые данные.

Как раз с заведения объектов мы и начнем, это центральная часть всей системы.

Все скриншоты сделаны с открытой демки продукта: https://pimcore.com/en/try

После прочтения статьи вы можете самостоятельно ознакомится с системой.

Классы

Все объекты в Pimcore должны иметь какой‑то класс, именно он определяет свойства объекта.

Заведение класса выглядит так:

09c6c89f5aadea650c8a7be5875787a9.png

Мы в одном интерфейсе создаем атрибуты и лейаут — как это будет выглядеть для пользователя:

334e6a15abf8a01a9bc08777cfd59465.png

С лейаутами есть крутая фишка — их можно делать много и разных, например переводчику не нужно изменять и видеть ничего, кроме названия и описания, поэтому можно сделать отдельный лейаут только с этими полями и назначить его для роли пользователя. Лейауты можно менять и программно в зависимости от ваших условий

Уверен, что многие из вас на этом этапе напряглись: тыкать мышкой? Как это деплоить? Как с этим работать в коде? Наверняка все на массивах? Что с производительностью?

Вот тут пошли плюшки уже для разработчиков.

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

Во‑вторых, для каждого класса генерируются PHP‑классы с типизированными сеттерами и гетерами, поэтому работа c DAO выглядит прилично:

setKey(\Pimcore\Model\Element\Service::getValidKey('New Name', 'object'));
$newObject->setParentId(123);
$newObject->setName("New Name");

Еще примеры можно посмотреть здесь.

В‑третьих, на каждый класс создается свои таблички в БД со своими колонками, а не хранится в одной помойке, поэтому с производительностью все хорошо (миллион объектов одного типа работают достойно). Плюс можно при настройке атрибута проставить ему галочку Индекс, тогда в БД будет создан индекс по этому полю.

По самим типам полей и элементов лейаута — их очень много (список смотрим тут), на все случаи жизни: начиная от простых текстовых, числовых с единицами измерения, релейшенами и заканчивая коллекциями полей, Classification Store (key‑value хранилище) и прикреплением Object Bricks — отдельные объекты‑кирпичики со своими полями.
Подробно почитать про Object Bricks и Classification Store можно тут.

Но если вам этого мало — многие из полей расширяемые, например для селекта можно запрограммировать свой провайдер данных, или сделать вычисляемое поле.

И конечно, можно запрограммировать свой тип данных.

Кроме того, поля можно засунуть в блок локализации, и тогда они станут переводами на несколько языков, заданных в настройках приложения.

36b3e1007e48220c55df7917306cd407.png

Созданные объекты отображаются табличкой, которую можно настраивать, выгружать, сортировать и искать по почти всем полям:

87210f55517a21669bb3ed5ef2cd7869.png

API

После того, как мы завели наши объекты встает вопрос, как их будут получать другие системы?

Для этого есть официальный bundle Datahub. Он позволяет также мышкой создать полноценный API на GraphQL, конфигурируя какие данные каких объектов можно получить:

a7e7fd172b0fc0e6599d9628aecf8d39.png

Эти настройки также сохраняются в файлы и их легко деплоить.

Для тестирования есть встроенный редактор GraphQL:

f1ea961dd87270b8f63f46434ac4fca8.png

Datahub легко расширяемый, например можно поставить бандл Datahub Importer и настроить автоматический импорт из разных источников (локальный, SFTP, HTTP) и форматов (CSV, XLSX, JSON, XML).

Ну и вы всегда можете сделать свой бандл, который будет отдавать данные в нужном виде куда угодно.

Расширение Pimcore

Я уже говорил, что система построена на базе Symfony, и как раз для расширения Pimcore нужно писать Symfony Bundle. Есть неплохая документация, как это сделать.

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

Единственное, админка написана на ExtJS — тут придется приноровиться, если с ним раньше не работали:)

Ограничений нет, тот же Datahub — это тоже отдельный бандл. Как раз при реализации своего бандла можно подглядывать в готовые официальные.

DAM система

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

bd5582a0807d84680521e13c863318c5.png

Пользователи и права

Настройка прав гибкая — вплоть до того, какие языки может редактировать пользователь или группа и какие объекты в каких папках видеть \ изменять, к каким разделам системы есть доступ:

2037515a5a4a4ec8df4de2ef0c2dfd7b.png

Другие фичи

Версионирование — для всех объектов хранятся версии, можно из просматривать и переключаться между ними:

4fcd4b34fda5a76922311766408dee11.png

Отчеты — пишем sql запрос (или провайдер данных), на основе которого строится красивый отчет по нужным данным:

1f886a62a516d7bdda8dd17691c78e22.png

Workflow — настройка флоу для объектов и ресурсов, использует Symfony Workflow.

И куча других возможностей.

Готовые бандлы и сообщество

В статье не раз упоминалась установка готовых бандлов, их для Pimcore много — https://pimcore.com/en/developers/marketplace. Как официальных, так и сделанных сообществом. Поэтому первым делом гуглим, нет ли бандла, который решит ваши проблемы, прежде, чем делать свой.

Например есть хороший бандл оценки качества заполненности объектов Data Quality Bundle, заполняем правила и видим, какие объекты требуют внимания:

eed272f9990fe2692fb878d50f9e3645.png

Все разработка ведется в github, через Issues можно взаимодействовать с разработчиками и помогать развивать проект. Отвечают оперативно и адекватно.

Можно следить за будущими релизами.

Есть неплохая документация. 

Заключение

Это далеко не все, что умеет Pimcore — я рассказал только о самых базовых вещах. Например CMS и E-Commerce Framework я вообще не затронул, это большая отдельная история, потому что хотел рассказать именно про MDM систему. 

Рекомендую посмотреть демо системы: https://pimcore.com/en/try

Надеюсь, я смог зажечь в вас интерес к продукту этой статьей!

Сергей Никитченко, SVK.digital

© Habrahabr.ru