Drupal 8

an Object-Oriented,

All-Inclusive

Content Management System

Luca Lusso

Senior Drupal Developer @Wellnet

  • Twitter: @lussoluca
  • Linkedin: it.linkedin.com/pub/luca-lusso/29/3a9/1a2/
  • Drupal.org: www.drupal.org/u/lussoluca
  • Acquia Certified Grand Master: https://training.acquia.com/registry/grand-masters
  • www.drupal.org/project/devel
  • www.drupal.org/project/xhprof
  • Drupal
  • Java
  • Mobile apps
  • Progettazione
  • Consulenza
  • Ricerca e sviluppo
  • Formazione
  • Campagne marketing
  • SEO e Advertise
  • Sempre alla ricerca di nuovi Drupalisti

Agenda

  • La nuova frontiera dei CMS open source
  • Come integrare codice di altri progetti e vivere felici
  • Modella e gestisci i tuoi contenuti in un click
  • Twig per designer e sviluppatori
  • Da procedurale a Object Oriented, i vantaggi del nuovo paradigma
  • Una community da un milione di appasionati
  • Verso Drupal 8.1

La nuova frontiera dei CMS open source

Cos'è Drupal?

Drupal non è un prodotto finito, ma un insieme di componenti

Drupal è un'applicazione scritta in PHP

Eseguita all'interno di un server web

Che memorizza i suoi dati/configurazioni all'interno di un database

--> Stack LAMP <--

Perché usare Drupal?

  • Flessibile
  • Modulare
  • Accessibile
  • Sicuro
  • Scalabile
  • Open source

Glossario

  • Core -> pacchetto base
  • Contrib -> codice fornito dalla community
  • Custom -> codice ad hoc per un progetto
  • Modulo -> aggiunge funzionalità
  • Tema -> aggiunge layout e stile
  • Distribuzione -> core+moduli+tema+configurazioni

Un po' di storia

2001

Prima versione pubblica

2006

Drupal 4.7

2007

Drupal 5

2008

Drupal 6

2011

Drupal 7

2015

Drupal 8

Cosa ci si può fare?

E molto altro ancora

  • whitehouse.gov
  • weather.com
  • louvre.fr
  • nasa.gov
  • cern.org
  • uniroma1.it/
  • mit.gov.it/

Drupal 8

  • 3491 sviluppatori
  • 1280 aziende
  • 92 paesi
  • 4 anni di sviluppo
  • 350.000 righe di codice
  • 200+ nuove funzionalità
  • Centinaia di siti già in produzione

Come integrare codice di altri progetti e vivere felici

Librerie integrate

  • symfony/class-loader
  • symfony/console
  • symfony/dependency-injection
  • symfony/event-dispatcher
  • symfony/http-foundation
  • symfony/http-kernel
  • symfony/routing
  • symfony/serializer
  • symfony/translation
  • symfony/validator
  • symfony/process
  • symfony/yaml
  • twig/twig
  • doctrine/common
  • doctrine/annotations
  • guzzlehttp/guzzle
  • symfony-cmf/routing
  • easyrdf/easyrdf

  • zendframework/zend-feed
  • stack/builder
  • egulias/email-validator
  • masterminds/html5
  • symfony/psr-http-message-bridge
  • zendframework/zend-diactoros
  • composer/semver
  • paragonie/random_compa
  • behat/mink
  • behat/mink-goutte-driver
  • jcalderonzumba/gastonjs
  • jcalderonzumba/mink-phantomjs-driver
  • mikey179/vfsStream
  • phpunit/phpunit
  • symfony/css-selector

N.I.H.

Not invented here

Proudly find elsewere

P.F.E.

Molti sottosistemi di Drupal 5/6/7 sono stati rimpiazzati da equivalenti (spesso migliori) componenti sviluppati dalla community PHP

Client HTTP


Drupal 7


drupal_http_request()


~300 righe di codice


Difficilmente testabile


Drupal 8


guzzlehttp/guzzle


modulare


100% code coverage

Webprofiler

Un esempio di come sia potente il nuovo motore di Drupal 8

Abbiamo preso un bundle di Symfony e l'abbiamo convertito in un modulo Drupal

Modella e gestisci i tuoi contenuti in un click

Drupal 8 è un Content Management Framework

Non è un CMS ma un generatore di CMS

  • Field e Content types
  • WYSIWYG
  • Layout e blocchi
  • Image styles
  • Tassonomie
  • Viste
  • E molto altro ...

Multilingua

In Drupal < 8 servivano decine di moduli contrib

In Drupal 8 ne bastano 4, e sono tutti nel core

Gestione delle configurazioni

Il nuovo Configuration Management rende semplice esportare TUTTA la configurazione di un sito da un ambiente all'altro.

Web service

Tutti i contenuti del sito sono pubblicabile via REST

si anche le viste!

Twig per designer e sviluppatori

  • HTML 5
  • Mobile first

Nuovi temi

  • Stable
  • Classy

Librerie js e css

  • Supporto migliorato
  • Nessun js caricato sulla home anonima

Twig

  • Niente più logica nei template
  • Sintassi molto più semplice
  • Più sicuro
  • Più veloce
  • Più intuitivo
  • Più documentato

Drupal 7


<div id="node-<?php print $node->nid; ?>" class="<?php print $classes; ?> clearfix"<?php print $attributes; ?>>

  <?php print render($title_prefix); ?>
  <?php if (!$page): ?>
    <h2<?php print $title_attributes; ?>>
      <a href="<?php print $node_url; ?>"><?php print $title; ?></a>
    </h2>
  <?php endif; ?>
  <?php print render($title_suffix); ?>

  <div class="content clearfix"<?php print $content_attributes; ?>>
    <?php
      // We hide the comments and links now so that we can render them later.
      hide($content['comments']);
      hide($content['links']);
      print render($content);
    ?>
  </div>
  					

Drupal 8


{{ attach_library('classy/node') }}
<article{{ attributes.addClass(classes) }}>
  <header>
    {{ title_prefix }}
    {% if not page %}
      <h2{{ title_attributes.addClass('node__title') }}>
        <a href="{{ url }}" rel="bookmark">{{ label }}</a>
      </h2>
    {% endif %}
    {{ title_suffix }}
    {% if display_submitted %}
      <div class="node__meta">
        {{ author_picture }}
        <span{{ author_attributes }}>
          {% trans %}Submitted by {{ author_name }} on {{ date }}{% endtrans %}
        </span>
        {{ metadata }}
      </div>
    {% endif %}
  					

Vecchi browser

Drupal 8 ha rimosso tutto il codice a supporto di IE 6/7/8

Da procedurale a Object Oriented, i vantaggi del nuovo paradigma

Il Core di Drupal fa già molte cose, ma il vero punto di forza sono i moduli contrib

Nello sviluppo di Drupal 8 ci si è concentrati sulla #DX -> Developer eXperiece

Drupal 7

90% procedurale

90% Object Oriented

Drupal 8

In Drupal < 8 lo strumento più importante da padroneggiare erano gli Hook

Callback invocate dal framework a istanti predefiniti

In grado di aggiungere/alterare il comportamento del sistema o di reagire ad eventi

In Drupal 8 quasi tutti gli hook sono stati rimossi

Sostituiti da: Servizi, Controller, Annotazioni, Plugin, Eventi

Servizi


 services: 
  logger.factory:
    class: Drupal\Core\Logger\LoggerChannelFactory
    parent: container.trait
    tags:
      - { name: service_collector, tag: logger, call: addLogger }
  module_handler:
    class: Drupal\Core\Extension\ModuleHandler
    arguments: ['@app.root', '%container.modules%', ...
  current_user:
    class: Drupal\Core\Session\AccountProxy
  renderer:
    class: Drupal\Core\Render\Renderer
    arguments: ['@controller_resolver', '@theme.manager', ...
					

Controller


node.add_page:
  path: '/node/add'
  defaults:
    _title: 'Add content'
    _controller: '\Drupal\node\Controller\NodeController::addPage'
  options:
    _node_operation_route: TRUE
  requirements:
    _node_add_access: 'node'
					

Annotazioni


/**
 * Provides a 'Syndicate' block that links to the site's RSS feed.
 *
 * @Block(
 *   id = "node_syndicate_block",
 *   admin_label = @Translation("Syndicate"),
 *   category = @Translation("System")
 * )
 */
class SyndicateBlock extends BlockBase {
[...]
}
					

Plugin

Eventi

Un altro ambito in cui si è lavorato molto sono le prestazioni

Fast by default

Cache tags, Placeholders, Big pipe, Turbolinks

Una community da un milione di appasionati

Come for the

software

Stay for the

community

Prossimi eventi

  • DrupalCon America (New Orleans 9-13 maggio)
  • Drupal Developer Days (Milano 21-26 giugno)
  • DrupalCon Europa (Dublino 26-30 settembre)
  • Drupal Day Italia (TBD)

Opportunità

  • Builder
  • Themer
  • Developer
  • UI/UX
  • Devops

Verso Drupal 8.1

Il cliclo di sviluppo di Drupal 8 sarà più veloce, promesso ;-)

Una nuova release ogni 6 mesi: 8.1.0, 8.2.0, ..., 8.x.0

Ad ogni release sarà consentito aggiugnere nuove funzionalità (e, in certi limiti, rompere la retrocompatibilità)

Symfony 2.8

Migrate UI (alpha)

Big pipe (alpha)

Grazie

Domande?