SlideShare ist ein Scribd-Unternehmen logo
1 von 34
Downloaden Sie, um offline zu lesen
Two Sides of the Same Coin: Maximizing UX
With Drupal’s Bootstrap Layout Builder
Speed up the site building With:
Drupal’s Bootstrap Layout Builder
Mahmoud Zayed
Software Architect
mahmoudz@imagexmedia.com
Aaron Christian
Software Architect
aaronc@imagexmedia.com
2
Mahmoud Zayed
3
Software Architect
Contact:
mahmoudz@imagexmedia.com
https://www.drupal.org/u/mahmoud-zayed
Drupal Slack: @Mahmoud Zayed
Twitter: @mahmoud_e_zayed
Case study
DrupalCon
Vienna 2017
● Dries has announced some
initiatives that enhances the user
experience for site builders.
● One of these initiatives was the
Layout Builder, which later
become a Drupal core module.
5
The Problem
6
Atomic Design
7
1. Atoms 2. Molecules 3. Organism 4. Template 5. Page
UI kits
8
● Made an extensive UI kit / guide for
the developers
● Listed both foundations and
components
● Started adding more responsive
version for each component
Annotations
9
● The designer numbers the components that
annotates the descriptions in the footer of the
page.
● This helps BA and Dev will use this to
understand the initial the feature
requirements.
● It’s good for keeping a discussion around a
component
● Client will use this to understand how the
elements and pages interact.
● We use the same numbers on other pages if we
are using the component
Additional Layout
Builder Modules
10
Plugins’ designs
11
Bootstrap Styles
Bootstrap Layout Builder
Layout Builder Blocks
12
Dependency
13
Bootstrap Styles
Bootstrap Layout Builder XYZ
Layout Builder Blocks
Styles’
Plugins
inventory
Creates
Dynamic
Layouts
Utilize Bootstrap
Styles Module in
the section
element render
array
Utilize Bootstrap
Styles Module in
the ????
element render
array
Utilize Bootstrap
Styles Module in
the block element
render array
Why Plugin
design
pattern?
Bootstrap Styles
14
https://www.drupal.org/project/bootstrap_styles
Plugins Group
● Plugins group is a wrapper of one or
more style plugin.
● It displays in the groups if at least one
of its plugins is enabled.
● It can contain any shared
configurations for its plugins.
15
How to
define a
new
group
plugin?
● Create the plugin group:
MODULE_NAME/src/Plugin/BootstrapStyles/StylesGroup/PLUGIN_GROUP_NAME.php
● Define the annotation.
16
@StylesGroup(
id = "background",
title = @Translation("Background"),
weight = 1,
icon = "bootstrap_styles/images/plugins/background-icon.svg"
)
● Add the class & the functions:
class GROUP_PLUGIN_NAME extends StylesGroupPluginBase {
------------ #1 ---------------
// Add elements to the configuration form.
public function buildConfigurationForm(array &$form, FormStateInterface $form_state) {}
// Saves the elements’ values to the form state.
public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {}
------------- #2 ---------------
// Add elements to Layout Builder dialog.
public function buildStyleFormElements(array &$form, FormStateInterface $form_state, $storage) {}
// Save the elements' values in the component settings.
public function submitStyleFormElements(array $group_elements) {}
}
Background group example - #1
17
class GROUP_PLUGIN_NAME extends StylesGroupPluginBase {
// Add elements to the configuration form.
public function buildConfigurationForm(array &$form, FormStateInterface $form_state) {}
// Saves the elements’ values to the form state.
public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {}
}
Background group example - #2
18
class GROUP_PLUGIN_NAME extends StylesGroupPluginBase {
// Add elements to Layout Builder dialog.
public function buildStyleFormElements(array &$form, FormStateInterface $form_state, $storage) {}
// Save the elements' values in the component settings.
public function submitStyleFormElements(array $group_elements) {}
}
@StylesGroup(
id = "background",
title = @Translation("Background"),
weight = 1,
icon = "bootstrap_styles/images/plugins/background-icon.svg"
)
Plugins
19
How to
define a
new
style
plugin?
● Create an style plugin:
MODULE_NAME/src/Plugin/BootstrapStyles/Style/STYLE_PLUGIN_NAME.php
● Define the annotation.
20
@Style(
id = "background_color",
title = @Translation("Background Color"),
group_id = "background",
weight = 1
)
● Add the class & the functions:
class STYLE_PLUGIN_NAME extends StylePluginBase {
------------ #1 ---------------
// Add elements to the configuration form.
public function buildConfigurationForm(array &$form, FormStateInterface $form_state) {}
// Saves the elements’ values to the form state.
public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {}
------------- #2 ---------------
// Add elements to Layout Builder dialog.
public function buildStyleFormElements(array &$form, FormStateInterface $form_state, $storage) {}
// Save the elements' values in the component settings.
public function submitStyleFormElements(array $group_elements) {}
------------- #3 ---------------
// Convert the storage to classes or attributes and merge them with the element’s render array.
public function build(array $build, array $storage, $theme_wrapper = NULL) {}
}
Background Color example - #1
21
class STYLE_PLUGIN_NAME extends StylePluginBase {
// Add elements to the configuration form.
public function buildConfigurationForm(array &$form, FormStateInterface $form_state) {}
// Saves the elements’ values to the form state.
public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {}
}
Background color example - #2
22
class STYLE_PLUGIN_NAME extends StylePluginBase {
// Add elements to Layout Builder dialog.
public function buildStyleFormElements(array &$form, FormStateInterface $form_state, $storage) {}
// Save the elements' values in the component settings.
public function submitStyleFormElements(array $group_elements) {}
}
Background color example - #3
23
class STYLE_PLUGIN_NAME extends StylePluginBase {
// Convert the storage to classes or attributes and merge them with the element’s render array.
public function build(array $build, array $storage, $theme_wrapper = NULL) {}
}
Bootstrap
Layout Builder
24
https://www.drupal.org/project/bootstrap_layout_builder
KING
Tab #1 Layout ● Developer can create breakpoints and
responsive layouts.
● Content editor can choose how the
content display on different devices.
25
KING
Tab #2 Style
● Let’s use Bootstrap Styles’ plugins in Bootstrap Layout Builder (Layout Builder Section).
26
KING
Tab #2 Style
● You have the option to restrict the styles’ plugins.
27
KING
Tab #3 Settings
● We call it advanced settings.
● Add additional classes.
● Add attributes to container, row or columns.
28
Layout Builder
Blocks
29
https://www.drupal.org/project/layout_builder_blocks
KING
Tab #1 Content
● Let’s use Bootstrap Styles’ plugins in
layout builder blocks.
30
Tab #2 Style
● Works with any block type!
KING
Tab #2 Style
● You have the option to restrict the styles’ plugins and the enabled block types!
31
Section Library
32
Let’s create reusable templates for single or
multiple sections!
Roadmap
33
09.05.XX
Current versions
June 2021:
● [Bootstrap Styles] Add & merge more plugins.
● [Bootstrap Styles] Responsive.
● [Bootstrap Layout Builder] Add the ability to style columns.
● [ Layout Builder Blocks] Add the ability to style field groups and
fields in a block.
● [Section Library] Release stable version of Section Library.
December 2021:
● [Bootstrap Styles] Add & merge more plugins.
● [Section Library] Import/Export templates.
● Creates components ( blocks ) that fully
integrated with the modules.
BS 1.0.3
BLB 2.0.1
LLB 1.0.1
SL 1.0.0-beta1
BS 1.1.x
BLB 2.1.x
LLB 1.1.x
SL 1.0.x
BS 1.2.x
BLB 2.2.x
LLB 1.2.x
SL 1.0.x
Demo
34

Weitere ähnliche Inhalte

Ähnlich wie Speed up the site building with Drupal's Bootstrap Layout Builder

Using Drupal Features in B-Translator
Using Drupal Features in B-TranslatorUsing Drupal Features in B-Translator
Using Drupal Features in B-TranslatorDashamir Hoxha
 
Drupal 8 Every Day: An Intro to Developing With Drupal 8
Drupal 8 Every Day: An Intro to Developing With Drupal 8Drupal 8 Every Day: An Intro to Developing With Drupal 8
Drupal 8 Every Day: An Intro to Developing With Drupal 8Acquia
 
Angular JS2 Training Session #2
Angular JS2 Training Session #2Angular JS2 Training Session #2
Angular JS2 Training Session #2Paras Mendiratta
 
Extending CMS Made Simple
Extending CMS Made SimpleExtending CMS Made Simple
Extending CMS Made Simplecmsmssjg
 
Turbogears2 tutorial to create mvc app
Turbogears2 tutorial to create mvc appTurbogears2 tutorial to create mvc app
Turbogears2 tutorial to create mvc appfRui Apps
 
Nuxeo World Session: Layouts and Content Views
Nuxeo World Session: Layouts and Content ViewsNuxeo World Session: Layouts and Content Views
Nuxeo World Session: Layouts and Content ViewsNuxeo
 
Adding custom ui controls to your application (1)
Adding custom ui controls to your application (1)Adding custom ui controls to your application (1)
Adding custom ui controls to your application (1)Oro Inc.
 
2 years of angular: lessons learned
2 years of angular: lessons learned2 years of angular: lessons learned
2 years of angular: lessons learnedDirk Luijk
 
Webform and Drupal 8
Webform and Drupal 8Webform and Drupal 8
Webform and Drupal 8Philip Norton
 
Spring and Web Content Management
Spring and Web Content ManagementSpring and Web Content Management
Spring and Web Content ManagementZak Greant
 
Multilingualism makes better programmers
Multilingualism makes better programmersMultilingualism makes better programmers
Multilingualism makes better programmersAlexander Varwijk
 
Speed up your developments with Symfony2
Speed up your developments with Symfony2Speed up your developments with Symfony2
Speed up your developments with Symfony2Hugo Hamon
 
Key Insights into Development Design Patterns for Magento 2 - Magento Live UK
Key Insights into Development Design Patterns for Magento 2 - Magento Live UKKey Insights into Development Design Patterns for Magento 2 - Magento Live UK
Key Insights into Development Design Patterns for Magento 2 - Magento Live UKMax Pronko
 
How AngularDart & Firebase did an App together
How AngularDart & Firebase did an App togetherHow AngularDart & Firebase did an App together
How AngularDart & Firebase did an App togetherJana Moudrá
 
Core Java Programming Language (JSE) : Chapter II - Object Oriented Programming.
Core Java Programming Language (JSE) : Chapter II - Object Oriented Programming.Core Java Programming Language (JSE) : Chapter II - Object Oriented Programming.
Core Java Programming Language (JSE) : Chapter II - Object Oriented Programming.WebStackAcademy
 
Workflow Essentials for Web Development
Workflow Essentials for Web DevelopmentWorkflow Essentials for Web Development
Workflow Essentials for Web DevelopmentXavier Porter
 
Dicoding Developer Coaching #30: Android | Mengenal Macam-Macam Software Desi...
Dicoding Developer Coaching #30: Android | Mengenal Macam-Macam Software Desi...Dicoding Developer Coaching #30: Android | Mengenal Macam-Macam Software Desi...
Dicoding Developer Coaching #30: Android | Mengenal Macam-Macam Software Desi...DicodingEvent
 

Ähnlich wie Speed up the site building with Drupal's Bootstrap Layout Builder (20)

Using Drupal Features in B-Translator
Using Drupal Features in B-TranslatorUsing Drupal Features in B-Translator
Using Drupal Features in B-Translator
 
Drupal 8 Every Day: An Intro to Developing With Drupal 8
Drupal 8 Every Day: An Intro to Developing With Drupal 8Drupal 8 Every Day: An Intro to Developing With Drupal 8
Drupal 8 Every Day: An Intro to Developing With Drupal 8
 
Extend sdk
Extend sdkExtend sdk
Extend sdk
 
Angular JS2 Training Session #2
Angular JS2 Training Session #2Angular JS2 Training Session #2
Angular JS2 Training Session #2
 
Extending CMS Made Simple
Extending CMS Made SimpleExtending CMS Made Simple
Extending CMS Made Simple
 
Turbogears2 tutorial to create mvc app
Turbogears2 tutorial to create mvc appTurbogears2 tutorial to create mvc app
Turbogears2 tutorial to create mvc app
 
Nuxeo World Session: Layouts and Content Views
Nuxeo World Session: Layouts and Content ViewsNuxeo World Session: Layouts and Content Views
Nuxeo World Session: Layouts and Content Views
 
Adding custom ui controls to your application (1)
Adding custom ui controls to your application (1)Adding custom ui controls to your application (1)
Adding custom ui controls to your application (1)
 
2 years of angular: lessons learned
2 years of angular: lessons learned2 years of angular: lessons learned
2 years of angular: lessons learned
 
Django crush course
Django crush course Django crush course
Django crush course
 
Webform and Drupal 8
Webform and Drupal 8Webform and Drupal 8
Webform and Drupal 8
 
Spring and Web Content Management
Spring and Web Content ManagementSpring and Web Content Management
Spring and Web Content Management
 
Multilingualism makes better programmers
Multilingualism makes better programmersMultilingualism makes better programmers
Multilingualism makes better programmers
 
Speed up your developments with Symfony2
Speed up your developments with Symfony2Speed up your developments with Symfony2
Speed up your developments with Symfony2
 
Key Insights into Development Design Patterns for Magento 2 - Magento Live UK
Key Insights into Development Design Patterns for Magento 2 - Magento Live UKKey Insights into Development Design Patterns for Magento 2 - Magento Live UK
Key Insights into Development Design Patterns for Magento 2 - Magento Live UK
 
How AngularDart & Firebase did an App together
How AngularDart & Firebase did an App togetherHow AngularDart & Firebase did an App together
How AngularDart & Firebase did an App together
 
Core Java Programming Language (JSE) : Chapter II - Object Oriented Programming.
Core Java Programming Language (JSE) : Chapter II - Object Oriented Programming.Core Java Programming Language (JSE) : Chapter II - Object Oriented Programming.
Core Java Programming Language (JSE) : Chapter II - Object Oriented Programming.
 
Workflow Essentials for Web Development
Workflow Essentials for Web DevelopmentWorkflow Essentials for Web Development
Workflow Essentials for Web Development
 
Dicoding Developer Coaching #30: Android | Mengenal Macam-Macam Software Desi...
Dicoding Developer Coaching #30: Android | Mengenal Macam-Macam Software Desi...Dicoding Developer Coaching #30: Android | Mengenal Macam-Macam Software Desi...
Dicoding Developer Coaching #30: Android | Mengenal Macam-Macam Software Desi...
 
Django introduction
Django introductionDjango introduction
Django introduction
 

Mehr von DrupalCamp Kyiv

Performance Monitoring with Google Lighthouse
Performance Monitoring with Google LighthousePerformance Monitoring with Google Lighthouse
Performance Monitoring with Google LighthouseDrupalCamp Kyiv
 
Oleg Bogut - Decoupled Drupal: how to build stable solution with JSON:API, Re...
Oleg Bogut - Decoupled Drupal: how to build stable solution with JSON:API, Re...Oleg Bogut - Decoupled Drupal: how to build stable solution with JSON:API, Re...
Oleg Bogut - Decoupled Drupal: how to build stable solution with JSON:API, Re...DrupalCamp Kyiv
 
Acquia BLT for the Win, or How to speed up the project setup, development an...
Acquia BLT for the Win, or  How to speed up the project setup, development an...Acquia BLT for the Win, or  How to speed up the project setup, development an...
Acquia BLT for the Win, or How to speed up the project setup, development an...DrupalCamp Kyiv
 
THE INTERNET OF THINGS IS GETTING REAL
THE INTERNET OF THINGS IS GETTING REALTHE INTERNET OF THINGS IS GETTING REAL
THE INTERNET OF THINGS IS GETTING REALDrupalCamp Kyiv
 
FRONT-END COMPONENTS IN DRUPAL THEME. "KAIZEN" - DRUPAL 8 THEME FROM SKILLD
FRONT-END COMPONENTS IN DRUPAL THEME. "KAIZEN" - DRUPAL 8 THEME FROM SKILLDFRONT-END COMPONENTS IN DRUPAL THEME. "KAIZEN" - DRUPAL 8 THEME FROM SKILLD
FRONT-END COMPONENTS IN DRUPAL THEME. "KAIZEN" - DRUPAL 8 THEME FROM SKILLDDrupalCamp Kyiv
 
DRUPAL AND ELASTICSEARCH
DRUPAL AND ELASTICSEARCHDRUPAL AND ELASTICSEARCH
DRUPAL AND ELASTICSEARCHDrupalCamp Kyiv
 
WHAT WE LEARNED FROM OPEN SOCIAL IN 3 YEARS, MOVING FROM AN AGENCY TO A PRODU...
WHAT WE LEARNED FROM OPEN SOCIAL IN 3 YEARS, MOVING FROM AN AGENCY TO A PRODU...WHAT WE LEARNED FROM OPEN SOCIAL IN 3 YEARS, MOVING FROM AN AGENCY TO A PRODU...
WHAT WE LEARNED FROM OPEN SOCIAL IN 3 YEARS, MOVING FROM AN AGENCY TO A PRODU...DrupalCamp Kyiv
 
DRUPAL 8 STORAGES OVERVIEW
DRUPAL 8 STORAGES OVERVIEWDRUPAL 8 STORAGES OVERVIEW
DRUPAL 8 STORAGES OVERVIEWDrupalCamp Kyiv
 
ONE MORE TIME ABOUT CODE STANDARDS AND BEST PRACTICES
ONE MORE TIME ABOUT CODE STANDARDS AND BEST PRACTICESONE MORE TIME ABOUT CODE STANDARDS AND BEST PRACTICES
ONE MORE TIME ABOUT CODE STANDARDS AND BEST PRACTICESDrupalCamp Kyiv
 
1-1 MEETING: STEP-BY-STEP-HOW-TO
1-1 MEETING: STEP-BY-STEP-HOW-TO1-1 MEETING: STEP-BY-STEP-HOW-TO
1-1 MEETING: STEP-BY-STEP-HOW-TODrupalCamp Kyiv
 
UX DURING MODULE INSTALLATION AND CONFIGURATION
UX DURING MODULE INSTALLATION AND CONFIGURATIONUX DURING MODULE INSTALLATION AND CONFIGURATION
UX DURING MODULE INSTALLATION AND CONFIGURATIONDrupalCamp Kyiv
 
SWITCHING FROM QA ENGINEER TO PROJECT MANAGER - LEVEL UP OR DOWN?
SWITCHING FROM QA ENGINEER TO PROJECT MANAGER - LEVEL UP OR DOWN?SWITCHING FROM QA ENGINEER TO PROJECT MANAGER - LEVEL UP OR DOWN?
SWITCHING FROM QA ENGINEER TO PROJECT MANAGER - LEVEL UP OR DOWN?DrupalCamp Kyiv
 
TECHNOLOGIES-POWERED WEB AND THE POST-BROWSER ERA
TECHNOLOGIES-POWERED WEB AND THE POST-BROWSER ERATECHNOLOGIES-POWERED WEB AND THE POST-BROWSER ERA
TECHNOLOGIES-POWERED WEB AND THE POST-BROWSER ERADrupalCamp Kyiv
 
PROTECTED CONTENT: END-TO-END PGP ENCRYPTION FOR DRUPAL
PROTECTED CONTENT: END-TO-END PGP ENCRYPTION FOR DRUPALPROTECTED CONTENT: END-TO-END PGP ENCRYPTION FOR DRUPAL
PROTECTED CONTENT: END-TO-END PGP ENCRYPTION FOR DRUPALDrupalCamp Kyiv
 
DRUPAL AUDITS MADE FASTR
DRUPAL AUDITS MADE FASTRDRUPAL AUDITS MADE FASTR
DRUPAL AUDITS MADE FASTRDrupalCamp Kyiv
 
FROM DISTRO TO CUSTOM - HOW WE CREATE GREAT COMMUNITIES FOR EVERY ORGANIZATIO...
FROM DISTRO TO CUSTOM - HOW WE CREATE GREAT COMMUNITIES FOR EVERY ORGANIZATIO...FROM DISTRO TO CUSTOM - HOW WE CREATE GREAT COMMUNITIES FOR EVERY ORGANIZATIO...
FROM DISTRO TO CUSTOM - HOW WE CREATE GREAT COMMUNITIES FOR EVERY ORGANIZATIO...DrupalCamp Kyiv
 
SEARCH API: TIPS AND TRICKS - FROM BEGINNING TO CUSTOM SOLUTIONS
SEARCH API: TIPS AND TRICKS - FROM BEGINNING TO CUSTOM SOLUTIONSSEARCH API: TIPS AND TRICKS - FROM BEGINNING TO CUSTOM SOLUTIONS
SEARCH API: TIPS AND TRICKS - FROM BEGINNING TO CUSTOM SOLUTIONSDrupalCamp Kyiv
 
DEVOPS & THE DEATH AND REBIRTH OF CHILDHOOD INNOCENCE
DEVOPS & THE DEATH AND REBIRTH OF CHILDHOOD INNOCENCEDEVOPS & THE DEATH AND REBIRTH OF CHILDHOOD INNOCENCE
DEVOPS & THE DEATH AND REBIRTH OF CHILDHOOD INNOCENCEDrupalCamp Kyiv
 

Mehr von DrupalCamp Kyiv (20)

Performance Monitoring with Google Lighthouse
Performance Monitoring with Google LighthousePerformance Monitoring with Google Lighthouse
Performance Monitoring with Google Lighthouse
 
Oleg Bogut - Decoupled Drupal: how to build stable solution with JSON:API, Re...
Oleg Bogut - Decoupled Drupal: how to build stable solution with JSON:API, Re...Oleg Bogut - Decoupled Drupal: how to build stable solution with JSON:API, Re...
Oleg Bogut - Decoupled Drupal: how to build stable solution with JSON:API, Re...
 
Acquia BLT for the Win, or How to speed up the project setup, development an...
Acquia BLT for the Win, or  How to speed up the project setup, development an...Acquia BLT for the Win, or  How to speed up the project setup, development an...
Acquia BLT for the Win, or How to speed up the project setup, development an...
 
Upgrading to Drupal 9
Upgrading to Drupal 9Upgrading to Drupal 9
Upgrading to Drupal 9
 
THE INTERNET OF THINGS IS GETTING REAL
THE INTERNET OF THINGS IS GETTING REALTHE INTERNET OF THINGS IS GETTING REAL
THE INTERNET OF THINGS IS GETTING REAL
 
FRONT-END COMPONENTS IN DRUPAL THEME. "KAIZEN" - DRUPAL 8 THEME FROM SKILLD
FRONT-END COMPONENTS IN DRUPAL THEME. "KAIZEN" - DRUPAL 8 THEME FROM SKILLDFRONT-END COMPONENTS IN DRUPAL THEME. "KAIZEN" - DRUPAL 8 THEME FROM SKILLD
FRONT-END COMPONENTS IN DRUPAL THEME. "KAIZEN" - DRUPAL 8 THEME FROM SKILLD
 
DRUPAL AND ELASTICSEARCH
DRUPAL AND ELASTICSEARCHDRUPAL AND ELASTICSEARCH
DRUPAL AND ELASTICSEARCH
 
WHAT WE LEARNED FROM OPEN SOCIAL IN 3 YEARS, MOVING FROM AN AGENCY TO A PRODU...
WHAT WE LEARNED FROM OPEN SOCIAL IN 3 YEARS, MOVING FROM AN AGENCY TO A PRODU...WHAT WE LEARNED FROM OPEN SOCIAL IN 3 YEARS, MOVING FROM AN AGENCY TO A PRODU...
WHAT WE LEARNED FROM OPEN SOCIAL IN 3 YEARS, MOVING FROM AN AGENCY TO A PRODU...
 
Blackfire Workshop
Blackfire WorkshopBlackfire Workshop
Blackfire Workshop
 
DRUPAL 8 STORAGES OVERVIEW
DRUPAL 8 STORAGES OVERVIEWDRUPAL 8 STORAGES OVERVIEW
DRUPAL 8 STORAGES OVERVIEW
 
ONE MORE TIME ABOUT CODE STANDARDS AND BEST PRACTICES
ONE MORE TIME ABOUT CODE STANDARDS AND BEST PRACTICESONE MORE TIME ABOUT CODE STANDARDS AND BEST PRACTICES
ONE MORE TIME ABOUT CODE STANDARDS AND BEST PRACTICES
 
1-1 MEETING: STEP-BY-STEP-HOW-TO
1-1 MEETING: STEP-BY-STEP-HOW-TO1-1 MEETING: STEP-BY-STEP-HOW-TO
1-1 MEETING: STEP-BY-STEP-HOW-TO
 
UX DURING MODULE INSTALLATION AND CONFIGURATION
UX DURING MODULE INSTALLATION AND CONFIGURATIONUX DURING MODULE INSTALLATION AND CONFIGURATION
UX DURING MODULE INSTALLATION AND CONFIGURATION
 
SWITCHING FROM QA ENGINEER TO PROJECT MANAGER - LEVEL UP OR DOWN?
SWITCHING FROM QA ENGINEER TO PROJECT MANAGER - LEVEL UP OR DOWN?SWITCHING FROM QA ENGINEER TO PROJECT MANAGER - LEVEL UP OR DOWN?
SWITCHING FROM QA ENGINEER TO PROJECT MANAGER - LEVEL UP OR DOWN?
 
TECHNOLOGIES-POWERED WEB AND THE POST-BROWSER ERA
TECHNOLOGIES-POWERED WEB AND THE POST-BROWSER ERATECHNOLOGIES-POWERED WEB AND THE POST-BROWSER ERA
TECHNOLOGIES-POWERED WEB AND THE POST-BROWSER ERA
 
PROTECTED CONTENT: END-TO-END PGP ENCRYPTION FOR DRUPAL
PROTECTED CONTENT: END-TO-END PGP ENCRYPTION FOR DRUPALPROTECTED CONTENT: END-TO-END PGP ENCRYPTION FOR DRUPAL
PROTECTED CONTENT: END-TO-END PGP ENCRYPTION FOR DRUPAL
 
DRUPAL AUDITS MADE FASTR
DRUPAL AUDITS MADE FASTRDRUPAL AUDITS MADE FASTR
DRUPAL AUDITS MADE FASTR
 
FROM DISTRO TO CUSTOM - HOW WE CREATE GREAT COMMUNITIES FOR EVERY ORGANIZATIO...
FROM DISTRO TO CUSTOM - HOW WE CREATE GREAT COMMUNITIES FOR EVERY ORGANIZATIO...FROM DISTRO TO CUSTOM - HOW WE CREATE GREAT COMMUNITIES FOR EVERY ORGANIZATIO...
FROM DISTRO TO CUSTOM - HOW WE CREATE GREAT COMMUNITIES FOR EVERY ORGANIZATIO...
 
SEARCH API: TIPS AND TRICKS - FROM BEGINNING TO CUSTOM SOLUTIONS
SEARCH API: TIPS AND TRICKS - FROM BEGINNING TO CUSTOM SOLUTIONSSEARCH API: TIPS AND TRICKS - FROM BEGINNING TO CUSTOM SOLUTIONS
SEARCH API: TIPS AND TRICKS - FROM BEGINNING TO CUSTOM SOLUTIONS
 
DEVOPS & THE DEATH AND REBIRTH OF CHILDHOOD INNOCENCE
DEVOPS & THE DEATH AND REBIRTH OF CHILDHOOD INNOCENCEDEVOPS & THE DEATH AND REBIRTH OF CHILDHOOD INNOCENCE
DEVOPS & THE DEATH AND REBIRTH OF CHILDHOOD INNOCENCE
 

Kürzlich hochgeladen

TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...Nguyen Thanh Tu Collection
 
1029 - Danh muc Sach Giao Khoa 10 . pdf
1029 -  Danh muc Sach Giao Khoa 10 . pdf1029 -  Danh muc Sach Giao Khoa 10 . pdf
1029 - Danh muc Sach Giao Khoa 10 . pdfQucHHunhnh
 
SOC 101 Demonstration of Learning Presentation
SOC 101 Demonstration of Learning PresentationSOC 101 Demonstration of Learning Presentation
SOC 101 Demonstration of Learning Presentationcamerronhm
 
How to Manage Global Discount in Odoo 17 POS
How to Manage Global Discount in Odoo 17 POSHow to Manage Global Discount in Odoo 17 POS
How to Manage Global Discount in Odoo 17 POSCeline George
 
Mixin Classes in Odoo 17 How to Extend Models Using Mixin Classes
Mixin Classes in Odoo 17  How to Extend Models Using Mixin ClassesMixin Classes in Odoo 17  How to Extend Models Using Mixin Classes
Mixin Classes in Odoo 17 How to Extend Models Using Mixin ClassesCeline George
 
Python Notes for mca i year students osmania university.docx
Python Notes for mca i year students osmania university.docxPython Notes for mca i year students osmania university.docx
Python Notes for mca i year students osmania university.docxRamakrishna Reddy Bijjam
 
UGC NET Paper 1 Mathematical Reasoning & Aptitude.pdf
UGC NET Paper 1 Mathematical Reasoning & Aptitude.pdfUGC NET Paper 1 Mathematical Reasoning & Aptitude.pdf
UGC NET Paper 1 Mathematical Reasoning & Aptitude.pdfNirmal Dwivedi
 
Single or Multiple melodic lines structure
Single or Multiple melodic lines structureSingle or Multiple melodic lines structure
Single or Multiple melodic lines structuredhanjurrannsibayan2
 
FSB Advising Checklist - Orientation 2024
FSB Advising Checklist - Orientation 2024FSB Advising Checklist - Orientation 2024
FSB Advising Checklist - Orientation 2024Elizabeth Walsh
 
Unit-V; Pricing (Pharma Marketing Management).pptx
Unit-V; Pricing (Pharma Marketing Management).pptxUnit-V; Pricing (Pharma Marketing Management).pptx
Unit-V; Pricing (Pharma Marketing Management).pptxVishalSingh1417
 
Graduate Outcomes Presentation Slides - English
Graduate Outcomes Presentation Slides - EnglishGraduate Outcomes Presentation Slides - English
Graduate Outcomes Presentation Slides - Englishneillewis46
 
Unit-IV- Pharma. Marketing Channels.pptx
Unit-IV- Pharma. Marketing Channels.pptxUnit-IV- Pharma. Marketing Channels.pptx
Unit-IV- Pharma. Marketing Channels.pptxVishalSingh1417
 
SKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptx
SKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptxSKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptx
SKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptxAmanpreet Kaur
 
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...christianmathematics
 
The basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptxThe basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptxheathfieldcps1
 
Salient Features of India constitution especially power and functions
Salient Features of India constitution especially power and functionsSalient Features of India constitution especially power and functions
Salient Features of India constitution especially power and functionsKarakKing
 
Food safety_Challenges food safety laboratories_.pdf
Food safety_Challenges food safety laboratories_.pdfFood safety_Challenges food safety laboratories_.pdf
Food safety_Challenges food safety laboratories_.pdfSherif Taha
 
Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...ZurliaSoop
 
How to Give a Domain for a Field in Odoo 17
How to Give a Domain for a Field in Odoo 17How to Give a Domain for a Field in Odoo 17
How to Give a Domain for a Field in Odoo 17Celine George
 

Kürzlich hochgeladen (20)

TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
 
1029 - Danh muc Sach Giao Khoa 10 . pdf
1029 -  Danh muc Sach Giao Khoa 10 . pdf1029 -  Danh muc Sach Giao Khoa 10 . pdf
1029 - Danh muc Sach Giao Khoa 10 . pdf
 
SOC 101 Demonstration of Learning Presentation
SOC 101 Demonstration of Learning PresentationSOC 101 Demonstration of Learning Presentation
SOC 101 Demonstration of Learning Presentation
 
How to Manage Global Discount in Odoo 17 POS
How to Manage Global Discount in Odoo 17 POSHow to Manage Global Discount in Odoo 17 POS
How to Manage Global Discount in Odoo 17 POS
 
Mixin Classes in Odoo 17 How to Extend Models Using Mixin Classes
Mixin Classes in Odoo 17  How to Extend Models Using Mixin ClassesMixin Classes in Odoo 17  How to Extend Models Using Mixin Classes
Mixin Classes in Odoo 17 How to Extend Models Using Mixin Classes
 
Python Notes for mca i year students osmania university.docx
Python Notes for mca i year students osmania university.docxPython Notes for mca i year students osmania university.docx
Python Notes for mca i year students osmania university.docx
 
UGC NET Paper 1 Mathematical Reasoning & Aptitude.pdf
UGC NET Paper 1 Mathematical Reasoning & Aptitude.pdfUGC NET Paper 1 Mathematical Reasoning & Aptitude.pdf
UGC NET Paper 1 Mathematical Reasoning & Aptitude.pdf
 
Spatium Project Simulation student brief
Spatium Project Simulation student briefSpatium Project Simulation student brief
Spatium Project Simulation student brief
 
Single or Multiple melodic lines structure
Single or Multiple melodic lines structureSingle or Multiple melodic lines structure
Single or Multiple melodic lines structure
 
FSB Advising Checklist - Orientation 2024
FSB Advising Checklist - Orientation 2024FSB Advising Checklist - Orientation 2024
FSB Advising Checklist - Orientation 2024
 
Unit-V; Pricing (Pharma Marketing Management).pptx
Unit-V; Pricing (Pharma Marketing Management).pptxUnit-V; Pricing (Pharma Marketing Management).pptx
Unit-V; Pricing (Pharma Marketing Management).pptx
 
Graduate Outcomes Presentation Slides - English
Graduate Outcomes Presentation Slides - EnglishGraduate Outcomes Presentation Slides - English
Graduate Outcomes Presentation Slides - English
 
Unit-IV- Pharma. Marketing Channels.pptx
Unit-IV- Pharma. Marketing Channels.pptxUnit-IV- Pharma. Marketing Channels.pptx
Unit-IV- Pharma. Marketing Channels.pptx
 
SKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptx
SKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptxSKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptx
SKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptx
 
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...
 
The basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptxThe basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptx
 
Salient Features of India constitution especially power and functions
Salient Features of India constitution especially power and functionsSalient Features of India constitution especially power and functions
Salient Features of India constitution especially power and functions
 
Food safety_Challenges food safety laboratories_.pdf
Food safety_Challenges food safety laboratories_.pdfFood safety_Challenges food safety laboratories_.pdf
Food safety_Challenges food safety laboratories_.pdf
 
Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
 
How to Give a Domain for a Field in Odoo 17
How to Give a Domain for a Field in Odoo 17How to Give a Domain for a Field in Odoo 17
How to Give a Domain for a Field in Odoo 17
 

Speed up the site building with Drupal's Bootstrap Layout Builder

  • 1. Two Sides of the Same Coin: Maximizing UX With Drupal’s Bootstrap Layout Builder Speed up the site building With: Drupal’s Bootstrap Layout Builder
  • 2. Mahmoud Zayed Software Architect mahmoudz@imagexmedia.com Aaron Christian Software Architect aaronc@imagexmedia.com 2
  • 5. DrupalCon Vienna 2017 ● Dries has announced some initiatives that enhances the user experience for site builders. ● One of these initiatives was the Layout Builder, which later become a Drupal core module. 5
  • 7. Atomic Design 7 1. Atoms 2. Molecules 3. Organism 4. Template 5. Page
  • 8. UI kits 8 ● Made an extensive UI kit / guide for the developers ● Listed both foundations and components ● Started adding more responsive version for each component
  • 9. Annotations 9 ● The designer numbers the components that annotates the descriptions in the footer of the page. ● This helps BA and Dev will use this to understand the initial the feature requirements. ● It’s good for keeping a discussion around a component ● Client will use this to understand how the elements and pages interact. ● We use the same numbers on other pages if we are using the component
  • 12. Bootstrap Styles Bootstrap Layout Builder Layout Builder Blocks 12
  • 13. Dependency 13 Bootstrap Styles Bootstrap Layout Builder XYZ Layout Builder Blocks Styles’ Plugins inventory Creates Dynamic Layouts Utilize Bootstrap Styles Module in the section element render array Utilize Bootstrap Styles Module in the ???? element render array Utilize Bootstrap Styles Module in the block element render array Why Plugin design pattern?
  • 15. Plugins Group ● Plugins group is a wrapper of one or more style plugin. ● It displays in the groups if at least one of its plugins is enabled. ● It can contain any shared configurations for its plugins. 15
  • 16. How to define a new group plugin? ● Create the plugin group: MODULE_NAME/src/Plugin/BootstrapStyles/StylesGroup/PLUGIN_GROUP_NAME.php ● Define the annotation. 16 @StylesGroup( id = "background", title = @Translation("Background"), weight = 1, icon = "bootstrap_styles/images/plugins/background-icon.svg" ) ● Add the class & the functions: class GROUP_PLUGIN_NAME extends StylesGroupPluginBase { ------------ #1 --------------- // Add elements to the configuration form. public function buildConfigurationForm(array &$form, FormStateInterface $form_state) {} // Saves the elements’ values to the form state. public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {} ------------- #2 --------------- // Add elements to Layout Builder dialog. public function buildStyleFormElements(array &$form, FormStateInterface $form_state, $storage) {} // Save the elements' values in the component settings. public function submitStyleFormElements(array $group_elements) {} }
  • 17. Background group example - #1 17 class GROUP_PLUGIN_NAME extends StylesGroupPluginBase { // Add elements to the configuration form. public function buildConfigurationForm(array &$form, FormStateInterface $form_state) {} // Saves the elements’ values to the form state. public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {} }
  • 18. Background group example - #2 18 class GROUP_PLUGIN_NAME extends StylesGroupPluginBase { // Add elements to Layout Builder dialog. public function buildStyleFormElements(array &$form, FormStateInterface $form_state, $storage) {} // Save the elements' values in the component settings. public function submitStyleFormElements(array $group_elements) {} } @StylesGroup( id = "background", title = @Translation("Background"), weight = 1, icon = "bootstrap_styles/images/plugins/background-icon.svg" )
  • 20. How to define a new style plugin? ● Create an style plugin: MODULE_NAME/src/Plugin/BootstrapStyles/Style/STYLE_PLUGIN_NAME.php ● Define the annotation. 20 @Style( id = "background_color", title = @Translation("Background Color"), group_id = "background", weight = 1 ) ● Add the class & the functions: class STYLE_PLUGIN_NAME extends StylePluginBase { ------------ #1 --------------- // Add elements to the configuration form. public function buildConfigurationForm(array &$form, FormStateInterface $form_state) {} // Saves the elements’ values to the form state. public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {} ------------- #2 --------------- // Add elements to Layout Builder dialog. public function buildStyleFormElements(array &$form, FormStateInterface $form_state, $storage) {} // Save the elements' values in the component settings. public function submitStyleFormElements(array $group_elements) {} ------------- #3 --------------- // Convert the storage to classes or attributes and merge them with the element’s render array. public function build(array $build, array $storage, $theme_wrapper = NULL) {} }
  • 21. Background Color example - #1 21 class STYLE_PLUGIN_NAME extends StylePluginBase { // Add elements to the configuration form. public function buildConfigurationForm(array &$form, FormStateInterface $form_state) {} // Saves the elements’ values to the form state. public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {} }
  • 22. Background color example - #2 22 class STYLE_PLUGIN_NAME extends StylePluginBase { // Add elements to Layout Builder dialog. public function buildStyleFormElements(array &$form, FormStateInterface $form_state, $storage) {} // Save the elements' values in the component settings. public function submitStyleFormElements(array $group_elements) {} }
  • 23. Background color example - #3 23 class STYLE_PLUGIN_NAME extends StylePluginBase { // Convert the storage to classes or attributes and merge them with the element’s render array. public function build(array $build, array $storage, $theme_wrapper = NULL) {} }
  • 25. KING Tab #1 Layout ● Developer can create breakpoints and responsive layouts. ● Content editor can choose how the content display on different devices. 25
  • 26. KING Tab #2 Style ● Let’s use Bootstrap Styles’ plugins in Bootstrap Layout Builder (Layout Builder Section). 26
  • 27. KING Tab #2 Style ● You have the option to restrict the styles’ plugins. 27
  • 28. KING Tab #3 Settings ● We call it advanced settings. ● Add additional classes. ● Add attributes to container, row or columns. 28
  • 30. KING Tab #1 Content ● Let’s use Bootstrap Styles’ plugins in layout builder blocks. 30 Tab #2 Style ● Works with any block type!
  • 31. KING Tab #2 Style ● You have the option to restrict the styles’ plugins and the enabled block types! 31
  • 32. Section Library 32 Let’s create reusable templates for single or multiple sections!
  • 33. Roadmap 33 09.05.XX Current versions June 2021: ● [Bootstrap Styles] Add & merge more plugins. ● [Bootstrap Styles] Responsive. ● [Bootstrap Layout Builder] Add the ability to style columns. ● [ Layout Builder Blocks] Add the ability to style field groups and fields in a block. ● [Section Library] Release stable version of Section Library. December 2021: ● [Bootstrap Styles] Add & merge more plugins. ● [Section Library] Import/Export templates. ● Creates components ( blocks ) that fully integrated with the modules. BS 1.0.3 BLB 2.0.1 LLB 1.0.1 SL 1.0.0-beta1 BS 1.1.x BLB 2.1.x LLB 1.1.x SL 1.0.x BS 1.2.x BLB 2.2.x LLB 1.2.x SL 1.0.x