drupal8 simplepage v2

Post on 16-Feb-2017

196 Views

Category:

Software

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Drupal 8 simple pageA walk for Drupal 8 module development

@estoyausenteSamuel Solís

</spam>

Coupon code 10€ discount*

<spam>

#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. ¿Menús?

5. Un poco caos

Configuration manager

Impresiones

1. ¡Funciona!

2. ¡Funciona bien!

3. Overrides entre entornos -> Settings

4. ¿Menús?

5. Un poco caos

Configuration manager

Impresiones

1. ¡Funciona!

2. ¡Funciona bien!

3. Overrides entre entornos -> Settings

4. ¿Menús?

5. Un poco caos

Configuration manager

Impresiones

1. ¡Funciona!

2. ¡Funciona bien!

3. Overrides entre entornos -> Settings

4. ¿Menús?

5. Un poco caos

Configuration manager

Impresiones

1. ¡Funciona!

2. ¡Funciona bien!

3. Overrides entre entornos -> Settings

4. ¿Menús?

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

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 %} <nav class="breadcrumbs" role="navigation" aria-labelledby="system-breadcrumb"> <h2 class="visually-hidden">{{ 'Breadcrumb'|t }}</h2> <ol class="itemlistbread"> {% for item in breadcrumb %} <li class="itembread"> {% if item.url %} <a href="{{ item.url }}" class="itembread__link">{{ item.text }}</a> {% else %} <span>{{ item.text }}</span> {% endif %} </li> {% endfor %} </ol> </nav> {% endif %}

public/templates/elements/breadcrumb.html.twig

Templates

<?php db_query('DROP TABLE {users}’);

?>

Templates

<?php db_query('DROP TABLE {users}’);

?>

Homework

• Caché

• Composer

• REST

• Migrate

• The change is so big…

Questions?

Thanks and enjoy this DrupalSummer!

@estoyausenteSamuel Solís

top related