Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

Hey, I’m Thomas – Co-founder & CEO of Sulu GmbH – More than 15 years of experience in web technologies & development – PHP, Symfony, React, SQL, Elasticsearch, … – Open source enthusiast – Loves cooking and mountains @chirimoya [email protected] https://github.com/chirimoya

Slide 3

Slide 3 text

Who knows Sulu?

Slide 4

Slide 4 text

Sulu CMS – Content Management Platform – Full-Stack Symfony – Made for businesses – Simple UI – High Performance – 100% Open Source

Slide 5

Slide 5 text

For business – Built with the needs of business and industry in mind – Enterprise features without ridiculous license fees – Supports multi-language, multi-portal and multi-channel – Easy to integrate data from external resources – Perfect for developing any type of business app

Slide 6

Slide 6 text

For editors – Really simple and very fast user interface – Web-based, no installation required – Edit forms that validate content & ensure correct semantics – Live preview content as you type it – Switch between different devices (Smartphone, Tablet or Desktop)

Slide 7

Slide 7 text

For developers – Full-Stack Symfony environment – Semantic configuration of templates – Easy transition from data to HTML – Build applications around content management – Add/Remove functionality with Symfony Bundles

Slide 8

Slide 8 text

Bicycles Everyone can ride them, many can repair it
 (WordPress etc.) Cars Many can ride them, some can repair it
 (Drupal, TYPO3 etc.) Supertanker Need highly specialized staff, expensive and very complex
 (Hybris, OpenText, Adobe Experience Manager etc.) Trucks Need a special license, must be configured to your needs (eZ Publish, Pimcore etc.) Where we see us …

Slide 9

Slide 9 text

When to use Sulu? – Complex brand and corporate presences – News and media platforms – Social and collaborative sites – E-Business projects – Handling external data resources – Where speed is a critical success factor

Slide 10

Slide 10 text

When not to use Sulu? – Sulu is not WordPress – We don’t recommend to use Sulu for: – Low budget marketing sites – Simple blogs – Hobby websites – Small business websites

Slide 11

Slide 11 text

Bring your own business logic What does that mean?

Slide 12

Slide 12 text

Bring your own business logic – Business websites are evolving into rich software applications, requiring ... – comprehensive integration – business logic – data management capabilities

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

One User Interface for all data management tasks? Less switching between different applications.

Slide 17

Slide 17 text

Maybe the Sulu administration interface could be the ONE? We build beautiful UIs with a great UX.

Slide 18

Slide 18 text

PHPCR DOCTRINE MySQL, PostgreSQL, Jackrabbit, ... Framework Symfony Symfony CMF Contact Media Content ... Sulu

Slide 19

Slide 19 text

REST API Single-Page Application Your Application Website Admin Symfony Symfony CMF Contact Media Content ... Sulu

Slide 20

Slide 20 text

REST API Single-Page Application Your Application Website Admin Symfony Symfony CMF Contact Media Content ... Sulu

Slide 21

Slide 21 text

Single-Page Application – Fast and responsive UI – Improved user experience – Only data is transmitted – Caching capabilities – Clean separation – REST API

Slide 22

Slide 22 text

Single-Page Application – Don't break the internet – Deep linking might be hard – Keep an eye on security (XSS) – On-the-fly extensibility is difficult – back-end developer != front-end developer

Slide 23

Slide 23 text

“ Navigating the hype-driven frontend development world without going insane. Kitze

Slide 24

Slide 24 text

Sulu 1.* Front-End Technologies

Slide 25

Slide 25 text

New major release ahead! Let's break some stuff ;-)

Slide 26

Slide 26 text

Sulu 2.0 Front-End Technologies

Slide 27

Slide 27 text

Making the front-end as extensible as the back-end. Without the need to write JavaScript!

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

Metadata for JavaScript views - List & Form – Determines all the available fields for lists and forms – Contains a data-type to know how to represent this field – Contains a title to display above fields – Form can contain more parameters to customize fields

Slide 30

Slide 30 text

We XML

Slide 31

Slide 31 text

I XML

Slide 32

Slide 32 text

events App\Entity\EventTranslation App\Entity\Event.translations App\Entity\EventTranslation.locale = :locale ... id App\Entity\Event title App\Entity\EventTranslation

Slide 33

Slide 33 text

event_details sulu_admin.title app.location app.teaser

Slide 34

Slide 34 text

REST API – The way data is transferred between backend and frontend – Identified by a resourceKey to combine list and detail requests – API has to follow a standard – Helper for list representations

Slide 35

Slide 35 text

// src/Admin/DoctrineListRepresentationFactory.php class DoctrineListRepresentationFactory { ... public function createDoctrineListRepresentation( string $resourceKey, array $filters = [], array $parameters = [] ): PaginatedRepresentation { $fieldDescriptors = $this->fieldDescriptorFactory->getFieldDescriptors($resourceKey); $listBuilder = $this->listBuilderFactory->create($fieldDescriptors['id']->getEntityName()); $this->restHelper->initializeListBuilder($listBuilder, $fieldDescriptors); ... return new PaginatedRepresentation( $list, $resourceKey, (int) $listBuilder->getCurrentPage(), (int) $listBuilder->getLimit(), (int) $listBuilder->count() ); }

Slide 36

Slide 36 text

# config/packages/sulu_admin.yaml sulu_admin: email: "%env(SULU_ADMIN_EMAIL)%" forms: directories: - "%kernel.project_dir%/config/forms" lists: directories: - "%kernel.project_dir%/config/lists" resources: events: routes: list: app.get_events detail: app.get_event field_type_options: selection: event_selection: default_type: list_overlay resource_key: events types: list_overlay: adapter: table list_key: events

Slide 37

Slide 37 text

Sulu Admin Class – Tagged Symfony service to extend the admin application of Sulu – Allows configuration of views and navigation items – Introduces security contexts – Add settings to configuration request

Slide 38

Slide 38 text

// src/Admin/EventAdmin.php class EventAdmin extends Admin { ... public function configureViews(ViewCollection $viewCollection): void { $locales = $this->webspaceManager->getAllLocales(); $listToolbarActions = [ new ToolbarAction('sulu_admin.add'), new ToolbarAction('sulu_admin.delete') ]; $listView = $this->viewBuilderFactory ->createListViewBuilder(self::EVENT_LIST_VIEW, '/events/:locale') ->setResourceKey(Event::RESOURCE_KEY) ->setListKey(self::EVENT_LIST_KEY) ->setTitle('app.events') ->addListAdapters(['table']) ->addLocales($locales) ->setDefaultLocale($locales[0]) ->setAddView(static::EVENT_ADD_FORM_VIEW) ->setEditView(static::EVENT_EDIT_FORM_VIEW) ->addToolbarActions($listToolbarActions); $viewCollection->add($listView);

Slide 39

Slide 39 text

// src/Admin/EventAdmin.php class EventAdmin extends Admin { ... public function configureNavigationItems(NavigationItemCollection $navigationItemCollection): void { // Configure a NavigationItem without a Route $module = new NavigationItem('app.events'); $module->setPosition(40); $module->setIcon('fa-calendar'); // Configure a NavigationItem with a Route $events = new NavigationItem('app.events'); $events->setPosition(10); $events->setMainRoute(static::EVENT_LIST_ROUTE); $module->addChild($events); $navigationItemCollection->add($module); } ...

Slide 40

Slide 40 text

Abstract field types – Almost every entity should have a selection for form assignments – Sulu includes an abstract `selection` and `single_selection` field type – This abstract field type can be configured by options such as resourceKey

Slide 41

Slide 41 text

# config/packages/sulu_admin.yaml sulu_admin: email: "%env(SULU_ADMIN_EMAIL)%" forms: directories: - "%kernel.project_dir%/config/forms" lists: directories: - "%kernel.project_dir%/config/lists" resources: events: routes: list: app.get_events detail: app.get_event field_type_options: selection: event_selection: default_type: list_overlay resource_key: events types: list_overlay: adapter: table list_key: events

Slide 42

Slide 42 text

No content

Slide 43

Slide 43 text

No content

Slide 44

Slide 44 text

Bring your own JavaScript. When you need more than Sulu provides out of the box.

Slide 45

Slide 45 text

Registries … FTW! – Lot of registries to hook into different places – Includes e.g. separate views, toolbar actions, form fields, … – React and JavaScript knowledge required to write them

Slide 46

Slide 46 text

Sulu 2.0 Facts and Figures

Slide 47

Slide 47 text

Sulu 2.0 Facts and Figures – Release date: 02.10.2019 – 2,5 years - 7.600+ hours – ~720 pull requests – ~268.000 lines of code added – ~396.000 lines of code removed

Slide 48

Slide 48 text

Sulu is more than just a CMS Give it a try.

Slide 49

Slide 49 text

No content