On Github lussoluca / drupal-8-commit-talk
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 <--
Un po' di storia
2001
Prima versione pubblica
2006
Drupal 4.7
2007
Drupal 5
2008
Drupal 6
2011
Drupal 7
2015
Drupal 8
Not invented here
Proudly find elsewere
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
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
Drupal 8 è un Content Management Framework
Non è un CMS ma un generatore di CMS
In Drupal < 8 servivano decine di moduli contrib
In Drupal 8 ne bastano 4, e sono tutti nel core
Il nuovo Configuration Management rende semplice esportare TUTTA la configurazione di un sito da un ambiente all'altro.
Tutti i contenuti del sito sono pubblicabile via REST
si anche le viste!
<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>
{{ 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 %}
Drupal 8 ha rimosso tutto il codice a supporto di IE 6/7/8
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
90% procedurale
90% Object Oriented
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
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', ...
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'
/** * 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 { [...] }
Un altro ambito in cui si è lavorato molto sono le prestazioni
Fast by default
Cache tags, Placeholders, Big pipe, Turbolinks
software
Stay for the
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à)