drupal8 simplepage v2

Download Drupal8 simplepage v2

Post on 16-Feb-2017

175 views

Category:

Software

0 download

Embed Size (px)

TRANSCRIPT

  • Drupal 8 simple pageA walk for Drupal 8 module development

  • @estoyausenteSamuel Sols

  • Coupon code 10 discount*

    #DrupalSummer2016

    *if($totalAmount > 60)

  • GO!

  • D7 Site building?

  • D7 modules?

  • PHP development?

  • Drupal 7

  • Drupal 8

  • This slides have examples

    based on my experience

    for more information please read the API page

  • Index

    1. Configuration manager

    2. Routing

    3. Forms

    4. Services

    5. Theming

  • Configuration manager

    Impresiones

    1. Funciona!

    2. Funciona bien!

    3. Overrides entre entornos -> Settings

    4. Mens?

    5. Un poco caos

  • Configuration manager

    Impresiones

    1. Funciona!

    2. Funciona bien!

    3. Overrides entre entornos -> Settings

    4. Mens?

    5. Un poco caos

  • Configuration manager

    Impresiones

    1. Funciona!

    2. Funciona bien!

    3. Overrides entre entornos -> Settings

    4. Mens?

    5. Un poco caos

  • Configuration manager

    Impresiones

    1. Funciona!

    2. Funciona bien!

    3. Overrides entre entornos -> Settings

    4. Mens?

    5. Un poco caos

  • Configuration manager

    Impresiones

    1. Funciona!

    2. Funciona bien!

    3. Overrides entre entornos -> Settings

    4. Mens?

    5. Un poco caos

  • Configuration manager

    Take a look

    1. https://www.drupal.org/project/config_tools

    2. https://www.drupal.org/project/config_update

    3. https://www.drupal.org/project/config_sync

    4. https://www.drupal.org/project/config_devel

    5. https://www.drupal.org/project/features

    https://www.drupal.org/project/config_toolshttps://www.drupal.org/project/config_updatehttps://www.drupal.org/project/config_synchttps://www.drupal.org/project/config_develhttps://www.drupal.org/project/features

  • Mi first module

    Drupal generate:module

  • Routing

    example_dyb_landing_content: path: '/landing-my-awsome-path' defaults: _controller: '\Drupal\example_dyb_landing\Controller\LandingContentController::pageContent' requirements: _access: 'TRUE'

    example_dyb_landing/example_dyb_landing.routing.yml

  • Routing

    example_dyb_landing_content: path: '/landing-my-awsome-path' defaults: _controller: '\Drupal\example_dyb_landing\Controller\LandingContentController::pageContent' requirements: _access: 'TRUE'

    example_dyb_landing/example_dyb_landing.routing.yml

    Start with slash /

  • Controller

    namespace Drupal\example_dyb_landing\Controller;use Drupal\Core\Controller\ControllerBase;use Drupal\Core\Url;class LandingContentController extends ControllerBase { public function pageContent() { $content = []; //Render array return $content; }}

    example_dyb_landing/src/Controllers/LandingContentController.php

  • Forms

    namespace Drupal\example_dyb_landing\Form;use Drupal\Core\Form\FormBase;use Drupal\Core\Form\FormStateInterface;class ContactForm extends FormBase { public function getFormId() { return 'contact_form'; }

    example_dyb_landing/src/Form/ContactForm.php

  • Forms

    public function buildForm(array $form, FormStateInterface $form_state) { $form['mail'] = array( '#type' => 'email', '#title' => $this->t('Email'), '#required' => TRUE, '#attributes' => ['class' => ['formcontrol']], );

    return $form; }

    example_dyb_landing/src/Form/ContactForm.php

  • Forms

    public function validateForm(array &$form, FormStateInterface $form_state) { $values = $form_state->getValues(); if(!\Drupal::service('email.validator')->isValid($values['mail'])) { $form_state->setErrorByName('mail', $this->t('The email address %mail is not valid.', array('%mail' => $values['mail']))); } }

    example_dyb_landing/src/Form/ContactForm.php

  • Forms

    public function submitForm(array &$form, FormStateInterface $form_state) { $values = $form_state->getValues(); $to = \Drupal::config('system.site')->get('mail'); $language_interface = \Drupal::languageManager()->getCurrentLanguage(); \Drupal::service('plugin.manager.mail')->mail('example_dyb_landing', 'contact_message', $to, $language_interface, $values, 'no-reply@mail.com'); drupal_set_message($this->t('Thank for contact us. Your message has been sent correctly.'));}

    example_dyb_landing/src/Form/ContactForm.php

  • Forms

    $output['bottom']['form'] = [ '#type' => 'container', '#attributes' => ['class' => ['left']], 'form' => \Drupal::formBuilder()->getForm('Drupal\example_dyb_landing\Form\ContactForm'), ];

    example_dyb_landing/src/Form/ContactForm.php

  • Forms

    $output['bottom']['form'] = [ '#type' => 'container', '#attributes' => ['class' => ['left']], 'form' => \Drupal::formBuilder()->getForm('Drupal\example_dyb_landing\Form\ContactForm'), ];

    example_dyb_landing/src/Form/ContactForm.php

  • Services

    *This is a spanish joke

    *

  • Services

    services: rest_client.client: class: Drupal\rest_client\RestClient

    example_dyb_landing/rest_client.services.yml

  • Services

    namespace Drupal\rest_client;/** * Class RestClient * @package Drupal\rest_client */ class RestClient{ protected $url; public function __construct() { $this->url = 'myserver.com'; }

    example_dyb_landing/src/RestClient.php

  • Services

    public function getSpecialities($country = 'ES') { $cid = 'rest_client_getSpecialities_' . $country; if ($cache = \Drupal::cache()->get($cid)) { return $cache->data; }

    //$output = getSomeStuff();

    \Drupal::cache()->set($cid, $output); return $output; } return [];}

    example_dyb_landing/src/RestClient.php

  • Servicios

    public function getSpecialities($country = 'ES') { $cid = 'rest_client_getSpecialities_' . $country; if ($cache = \Drupal::cache()->get($cid)) { return $cache->data; }

    //$output = getSomeStuff();

    \Drupal::cache()->set($cid, $output); return $output; } return [];}

    example_dyb_landing/src/RestClient.php

  • dependencies: - rest_client

    example_dyb_landing/example_dyb_landing.info.yml

    Dependency injection

  • namespace Drupal\register_form\Form;use Drupal\rest_client\RestClient;

    class RegisterForm extends FormBase{ protected $client; public function __construct(RestClient $client) { $this->client = $client; } public static function create(ContainerInterface $container) { return new static( $container->get('rest_client.client'), ); }

    example_dyb_landing/src/Form/RegisterForm.php

    Dependency injection

  • Dependency injection

    public function buildForm(array $form, FormStateInterface $form_state) {

    $form['speciality'] = [ '#type' => 'select', '#options' => $this->client->getSpecialities(), '#title' => $this->t('Speciality'), '#required' => TRUE, '#attributes' => ['class' => ['formcontrol']],]; return $form;

    }

    example_dyb_landing/src/Form/RegisterForm.php

  • My first theme

    Drupal generate:theme

  • Mi primer theme

    name: publictype: themedescription: Public theme.package: Othercore: 8.xlibraries: - public/global-stylingbase theme: classyregions: content: Content header: Header footer: Footer

    public/public.info.yml

  • Add css/js

    global-styling: version: 1.x css: theme: css/style.css: {} js: js/public.js: {} dependencies: - core/jquery - core/drupal - core/drupalSettings

    public/public.libraries.yml

  • Preprocess

    function public_preprocess_breadcrumb(&$variables){ //Add current page to breadcrumb. $request = \Drupal::request(); $route_match = \Drupal::routeMatch(); $page_title = \Drupal::service('title_resolver')->getTitle($request, $route_match->getRouteObject()); $variables['breadcrumb'][] = array( 'text' => $page_title, );}

    public/public.theme

  • Twig

    {% if breadcrumb %} {{ 'Breadcrumb'|t }} {% for item in breadcrumb %} {% if item.url %} {{ item.text }} {% else %} {{ item.text }} {% endif %} {% endfor %} {% endif %}

    public/templates/elements/breadcrumb.html.twig

  • Templates

  • Templates

  • Homework

    Cach

    Composer

    REST

    Migrate

    The change is so big

  • Questions?

  • Thanks and enjoy this DrupalSummer!

    @estoyausenteSamuel Sols