Transcript
Page 1: Layout discovery. Drupal Summer Barcelona 2017

Layout discovery

Drupal Summer Barcelona 2017Luis Ortiz Ramos

Page 2: Layout discovery. Drupal Summer Barcelona 2017

Luis Ortiz RamosCTO de Atenea tech

[email protected]

●@luisortizramos

Page 3: Layout discovery. Drupal Summer Barcelona 2017
Page 4: Layout discovery. Drupal Summer Barcelona 2017

● Somos expertos en Drupal desde 2007

● Somos Siddharta, Oriol, Robert, David,

Patricia, Xavi, Rubén, Pepe, Miguel y Luis.

● Trabajamos para La Vanguardia, Thermomix,

Dexeus, Estrella Damm, Amnistía

Internacional, Médicos Sin Fronteras, Infojobs,

Greenpeace, Chupa Chups, Ayuntamiento de

Barcelona, Torres, la CUP…

● Estamos en el Citilab de Cornellà, Barcelona

● Puedes contactar con nosotros en

[email protected]

Page 5: Layout discovery. Drupal Summer Barcelona 2017
Page 6: Layout discovery. Drupal Summer Barcelona 2017

Layout initiative

… nombre en clave “SCOTCH”

Page 7: Layout discovery. Drupal Summer Barcelona 2017

En marzo de 2012, Dries Buytaert anuncia una nueva iniciativa: Layouts.

El líder de la iniciativa es Kris “EclipseGC” Vanderwater

Page 8: Layout discovery. Drupal Summer Barcelona 2017

“The goal of the Layout initiative is to make all

elements on the page into contextual blocks that

can be rearranged and organized into flexible

layouts (and even layouts within layouts) through

a drag and drop interface.”

Page 9: Layout discovery. Drupal Summer Barcelona 2017

1.Contextual blocks

2.Blocks everywhere

3.Multiple page layouts

4.Partial page rendering

5.Better UI/UX to manage blocks

Page 10: Layout discovery. Drupal Summer Barcelona 2017

En marzo de 2012:●El componente de Symfony HttpKernel no

estaba en el core●CMI no estaba completado●El sistema de Plugins estaba en desarrollo

Page 11: Layout discovery. Drupal Summer Barcelona 2017

En octubre de 2012 se commitean los primeros cambios...

Page 12: Layout discovery. Drupal Summer Barcelona 2017

El ciclo de desarrollo de Drupal 8...

...hasta 8.0.0

Page 13: Layout discovery. Drupal Summer Barcelona 2017
Page 14: Layout discovery. Drupal Summer Barcelona 2017
Page 15: Layout discovery. Drupal Summer Barcelona 2017
Page 16: Layout discovery. Drupal Summer Barcelona 2017

Algo pasó en la Drupalcon de Barcelona

...en 2015

Page 17: Layout discovery. Drupal Summer Barcelona 2017
Page 18: Layout discovery. Drupal Summer Barcelona 2017
Page 19: Layout discovery. Drupal Summer Barcelona 2017
Page 20: Layout discovery. Drupal Summer Barcelona 2017
Page 21: Layout discovery. Drupal Summer Barcelona 2017
Page 22: Layout discovery. Drupal Summer Barcelona 2017
Page 23: Layout discovery. Drupal Summer Barcelona 2017

1.Crear una branch por cada característica

2.Solo hacer merge con la branch principal

cuando la característica esté finalizada

3. Lanzar nuevas versiones de Drupal

periódicamente

Page 24: Layout discovery. Drupal Summer Barcelona 2017
Page 25: Layout discovery. Drupal Summer Barcelona 2017

Layout Discovery está en Drupal 8.3.0 (experimental)

...y Field Layout también

Page 26: Layout discovery. Drupal Summer Barcelona 2017
Page 27: Layout discovery. Drupal Summer Barcelona 2017

Layout Discovery

Page 28: Layout discovery. Drupal Summer Barcelona 2017

“Provides a way for modules or themes to

register layouts.”

Page 29: Layout discovery. Drupal Summer Barcelona 2017

Registrando Layouts

Page 30: Layout discovery. Drupal Summer Barcelona 2017

El caso más simple

Page 31: Layout discovery. Drupal Summer Barcelona 2017

1.Creamos el archivo

my_custom_module.layouts.yml

2. Creamos una plantilla

Page 32: Layout discovery. Drupal Summer Barcelona 2017

two_column:label: 'Two column'category: 'My Layouts'template: templates/two-columndefault_region: mainregions:main:label: Main content

sidebar:label: Sidebar

Page 33: Layout discovery. Drupal Summer Barcelona 2017

<div class="two-column"><div class="main-region">{{ content.main }}

</div><div class="sidebar-region">{{ content.sidebar }}

</div></div>

Page 34: Layout discovery. Drupal Summer Barcelona 2017

Registrando nuestra propia plantilla usando theme

Page 35: Layout discovery. Drupal Summer Barcelona 2017

1.Registramos la plantilla usando hook_theme

2.Creamos la plantilla

3.Registramos el layout en el archivo

my_custom_module.layouts.yml

Page 36: Layout discovery. Drupal Summer Barcelona 2017

function MY_MODULE_OR_THEME_theme() {return ['advanced_layout_1' => ['template' => 'templates/advanced-layout-1',// layout_plugin expects the theme hook to be declared

with this:'render element' => 'content',

],];

}

Page 37: Layout discovery. Drupal Summer Barcelona 2017

advanced_layout_1:label: Advanced Layout 1category: My Layoutstheme: advanced_layout_1regions:main:label: Main content

alternate_advanced_layout_1:label: Advanced Layout 1category: My Layoutstheme: advanced_layout_1__alternateregions:main:label: Main content

Page 38: Layout discovery. Drupal Summer Barcelona 2017

Utilizando una clase alternativa

Page 39: Layout discovery. Drupal Summer Barcelona 2017

advanced_layout_3:label: Advanced Layout 3category: My Layoutsclass: '\Drupal\my_custom_module\MyLayoutClass'template: templates/advanced-layout-3library: my_custom_module/advanced-layout-libraryregions:main:label: Main content

Page 40: Layout discovery. Drupal Summer Barcelona 2017

<?php

namespace Drupal\my_custom_module;

use Drupal\Core\Form\FormStateInterface;use Drupal\Core\Layout\LayoutDefault;

class MyLayoutClass extends LayoutDefault {

Page 41: Layout discovery. Drupal Summer Barcelona 2017

/*** {@inheritdoc}*/public function defaultConfiguration() {return parent::defaultConfiguration() + ['extra_classes' => 'Default',

];}

Page 42: Layout discovery. Drupal Summer Barcelona 2017

/*** {@inheritdoc}*/public function buildConfigurationForm(array $form,

FormStateInterface $form_state) {$configuration = $this->getConfiguration();$form['extra_classes'] = ['#type' => 'textfield','#title' => $this->t('Extra classes'),'#default_value' => $configuration['extra_classes'],

];return $form;

}

Page 43: Layout discovery. Drupal Summer Barcelona 2017

/*** {@inheritdoc}*/public function submitConfigurationForm(array &$form,

FormStateInterface $form_state) {parent::submitConfigurationForm($form, $form_state);

$this->configuration['extra_classes'] = $form_state->getValue('extra_classes');}

}

Page 44: Layout discovery. Drupal Summer Barcelona 2017

<div class="my-advanced-layout {{ settings.extra_classes }}"><div class="main-region">{{ content.main }}

</div></div>

Page 45: Layout discovery. Drupal Summer Barcelona 2017

Registrando layouts como un plugin

Page 46: Layout discovery. Drupal Summer Barcelona 2017

namespace Drupal\my_custom_module\Plugin\Layout;

use Drupal\Core\Layout\LayoutDefault;

/*** A very advanced custom layout.** @Layout(* id = "advanced_layout_4",* label = @Translation("Advanced Layout 4"),* template = "templates/advanced-layout-4",* regions = {* "main" = {* "label" = @Translation("Main content"),* }* }* )*/

class AdvancedLayout4 extends LayoutDefault {// Override any methods you'd like to customize here!

}

Page 47: Layout discovery. Drupal Summer Barcelona 2017

Registrando layouts usando derivatives

Page 48: Layout discovery. Drupal Summer Barcelona 2017

namespace Drupal\my_custom_module\Plugin\Layout;

use Drupal\Core\Layout\LayoutDefault;

/*** A layout from our flexible layout builder.** @Layout(* id = "flexible_layout",* deriver = "Drupal\my_custom_module\Plugin\Deriver\FlexibleLayoutDeriver"* )*/

class FlexibleLayout extends LayoutDefault {

/*** {@inheritdoc}*/

public function build(array $regions) {$render_array = parent::build($regions);… return $render_array;

}

}

Page 49: Layout discovery. Drupal Summer Barcelona 2017

namespace Drupal\my_custom_module\Plugin\Deriver;

use Drupal\Component\Plugin\Derivative\DeriverBase;use Drupal\Core\Layout\LayoutDefinition;

/*** Makes a flexible layout for each layout config entity.*/

class FlexibleLayoutDeriver extends DeriverBase {

Page 50: Layout discovery. Drupal Summer Barcelona 2017

… /*** {@inheritdoc}*/

public function getDerivativeDefinitions($base_plugin_definition) {$config_entities = [];

foreach ($config_entities as $entity) {// Here we fill in any missing keys on the layout annotation.$this->derivatives[$entity->id()] = new LayoutDefinition([

'label' => $entity->label(),'category' => $entity->getCategory(),'regions' => $entity->getRegions(),

]);}

return $this->derivatives;}

}

Page 51: Layout discovery. Drupal Summer Barcelona 2017

Utilizando Layouts

…con código

Page 52: Layout discovery. Drupal Summer Barcelona 2017

Instanciando el layout plugin manager

Page 53: Layout discovery. Drupal Summer Barcelona 2017

$layoutPluginManager = \Drupal::service('plugin.manager.core.layout');

Page 54: Layout discovery. Drupal Summer Barcelona 2017

Listando layouts

Page 55: Layout discovery. Drupal Summer Barcelona 2017

$layoutPluginManager = \Drupal::service('plugin.manager.core.layout');$layoutDefinitions = $layoutPluginManager->getDefinitions();$definedLayouts = [];foreach ($layoutDefinitions as $key => $layoutDefinition) {

$definedLayouts[] = $layoutDefinition->getLabel();}return [

'#theme' => 'item_list','#items' => $definedLayouts,

];

Page 56: Layout discovery. Drupal Summer Barcelona 2017

Instanciando un layout

Page 57: Layout discovery. Drupal Summer Barcelona 2017

$layoutPluginManager = \Drupal::service('plugin.manager.core.layout');// Provide any configuration to the layout plugin if necessary.$layoutInstanceConfiguration = [];$layoutInstance = $layoutPluginManager->createInstance('layout_twocol', $layoutInstanceConfiguration);

Page 58: Layout discovery. Drupal Summer Barcelona 2017

Renderizando layouts

Page 59: Layout discovery. Drupal Summer Barcelona 2017

$layoutPluginManager = \Drupal::service('plugin.manager.core.layout');// Provide any configuration to the layout plugin if necessary.$layoutInstanceConfiguration = [];$layoutInstance = $layoutPluginManager->createInstance('layout_twocol', $layoutInstanceConfiguration);

// Build the content for your regions.$regions = [

'top' => ['#markup' => 'Lorem ipsum dolor sit amet...',

],'left' => [

'#markup' => 'Stet clita kasd gubergren...',],'right' => [

'#markup' => 'At vero eos et accusam et justo duo dolores et ea rebum...',],'bottom' => [

'#markup' => 'At vero eos et accusam et justo duo dolores et ea rebum...',],

];

// This builds the render array.return $layoutInstance->build($regions);

Page 60: Layout discovery. Drupal Summer Barcelona 2017

Utilizando Layouts

…el resto del tiempo

Page 61: Layout discovery. Drupal Summer Barcelona 2017

●Field layouts●Display Suite > 8.3.x●Panels > 8.4.x

●Bootstrap layouts > 8.5.x

Page 62: Layout discovery. Drupal Summer Barcelona 2017

Futuro

Page 63: Layout discovery. Drupal Summer Barcelona 2017

1. Regiones configurables

2. Bloques como campos

3. Genera iconos de layouts automáticamente

4.Multiple page layouts

Page 64: Layout discovery. Drupal Summer Barcelona 2017

¡Gracias!

¿Preguntas?


Top Related