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à)