88
Le système de blocs de drop.org à Drupal 8 Par Frédéric G. MARAND (fgm)

Les blocs Drupal de drop.org à Drupal 8

  • Upload
    osinet

  • View
    3.326

  • Download
    0

Embed Size (px)

DESCRIPTION

Le système de blocs a été présent depuis les origines de Drupal sur drop.org jusqu'à aujourd'hui dans Drupal 8. Cette présentation retrace l'historique de son développement, et plus largement celui de Drupal dans son ensemble.

Citation preview

Page 1: Les blocs Drupal de drop.org à Drupal 8

Le système de blocs de drop.org à Drupal 8

Par Frédéric G. MARAND (fgm)

Page 2: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Il était une fois ...

« First we start making a slashdot.org alike site: a community weblog that offers all you need to know »

docs/mission.php, circa 2000-03

Page 3: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal LoC vs time–

24/07/98 19/04/01 14/01/04 10/10/06 06/07/09 01/04/12 27/12/14100

1000

10000

100000

1000000

100

1000

10000

100000

1000000

PHP Code

JS Code

CSS Code

Shell, perl Code

data, conf

Page 4: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

drop.orgDrupal 1

Drupal 2Drupal 3

Drupal 4Drupal 4.1

Drupal 4.2Drupal 4.3

Drupal 4.4Drupal 4.5

Drupal 4.6Drupal 4.7

Drupal 5Drupal 6

Drupal 7Drupal 8

10

100

1000

10000

100000

1000000

PHP FilesPHP Com

PHP Code

PHP dans Drupal

Page 5: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

drop.orgDrupal 1

Drupal 2Drupal 3

Drupal 4Drupal 4.1

Drupal 4.2Drupal 4.3

Drupal 4.4Drupal 4.5

Drupal 4.6Drupal 4.7

Drupal 5Drupal 6

Drupal 7Drupal 8

1

10

100

1000

10000

100000

CSS FileCSS Comment

CSS Code

CSS dans Drupal

Page 6: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

drop.orgDrupal 1

Drupal 2Drupal 3

Drupal 4Drupal 4.1

Drupal 4.2Drupal 4.3

Drupal 4.4Drupal 4.5

Drupal 4.6Drupal 4.7

Drupal 5Drupal 6

Drupal 7Drupal 8

1

10

100

1000

10000

100000

JS Files

JS Com

JS Code

JavaScript dans Drupal

Page 7: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

drop.org qu'est-ce qu'un bloc ?–● Every single 'box' on the website can be themed: not only 

the colors but the entire look-and-feel and position.● Boxes:

● Box for latest headlines.● Box for older headlines.● Box for related links.● Box with login form.● User-defined box.

● Theme support:● Not only can you change the colors, you can also change 

the position of most boxes and such.docs/features.php, circa 2000-03

Page 8: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

drop.org cycle de page–● pas de front controller, contrôleur = fichier PHP

● index.php, faq.php, article.php, ...● paramètres GET, notamment op pour les variantes● register_globals = on nécessaire● back-office dédié : admin.php

● le contrôleur● charge les fonctions communes, la configuration● $theme->header()● s'il a des variantes, switch ($op)

– ajoute son contenu en fonction de $op, – par exemple $theme->article(), d'autres font du HTML inline– article(), box() , comment(), abstract(), footer(), header(), preview()

● $theme->footer()

Page 9: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

drop.org - positionnement● Pas d'interface utilisateur de positionnement● Les méthodes de thème décident des blocs à afficher dans leurs éléments prédéfinis header et footer.● themes/Dries/theme.class function footer() { /* ..snip.. */ global $PHP_SELF; if (strstr($PHP_SELF, "index.php")) { global $user; displayAccount($this);● les fonctions prédéfinies invoquent $theme->box($subject, $content)● functions.inc function displayAccount($theme) { global $user, $cookie; if ($user) { ### Display userblock if any: displayUserblock(); } else { $content = "<CENTER><FORM METHOD=\"post\" ACTION=\"account.php\">\n <P>Username:<BR><INPUT TYPE=\"text\" NAME=\"uname\" MAXLENGTH=\"50\" SIZE=\"12\"></P>\n<P>Password:<BR> <INPUT TYPE=\"password\" NAME=\"pass\" MAXLENGTH=\"25\" SIZE=\"12\"></P>\n<INPUT TYPE=\"submit\" NAME=\"op\" VALUE=\"Login\">\n</FORM>\n<P><A HREF=\"account.php\">Register</A> as new user.<BR><A HREF=\"account.php\">Forgot</A> your password?</P></CENTER>"; $theme->box("Login", $content); } }

Page 10: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

drop.org : thème de box● themes/Natrak/theme.class ###### # Syntax.......: box($title, $body); # Description..: a function to draw a box/block. function box($subject, $content) { include "config.inc"; print "<TABLE BORDER=\"0\" CELLPADDING=\"3\" CELLSPACING=\"3\" WIDTH=\"100%\">"; print " <TR><TD ALIGN=\"center\" BGCOLOR=\"$this->bgcolor1\" WIDTH=\"100%\"><FONT COLOR=\"$this->fgcolor1\"><B>$subject</B></FONT></TD></TR>"; print " <TR><TD BGCOLOR=\"$this->bgcolor2\">$content</TD></TR>"; print "</TABLE><BR>"; }● themes/Natrak/theme.php function themebox($subject, $content) { global $bgcolor1, $bgcolor2, $bgcolor3; include "config.inc"; print "<TABLE BORDER=\"0\" CELLPADDING=\"3\" CELLSPACING=\"3\" WIDTH=\"100%\">"; print " <TR><TD ALIGN=\"center\" BGCOLOR=\"$bgcolor1\"><FONT COLOR=\"$bgcolor2\"><B>$subject</B></FONT></TD></TR>"; print " <TR><TD BGCOLOR=\"$bgcolor2\">$content</TD></TR>"; print "</TABLE><BR>"; }● webboard.php appelle la fonction, les autres la méthode

Les thèmes sont des classes PHP

Mais pas seulement...

Page 11: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

drop.org - Page d'article

Page 12: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

drop.org ab -n10000 -c10 (home)–Server Software: Apache/2.2.22Server Hostname: drop1Server Port: 80

Document Path: /Document Length: 9088 bytes

Concurrency Level: 10Time taken for tests: 9.821 secondsComplete requests: 10000Failed requests: 0Write errors: 0Total transferred: 93350000 bytesHTML transferred: 90880000 bytesRequests per second: 1018.24 [#/sec] (mean)Time per request: 9.821 [ms] (mean)Time per request: 0.982 [ms] (mean, across all concurrent requests)Transfer rate: 9282.49 [Kbytes/sec] received

Connection Times (ms) min mean[+/-sd] median maxConnect: 0 0 0.1 0 2Processing: 2 10 4.0 9 62Waiting: 1 9 3.8 9 61Total: 2 10 4.0 9 62

Percentage of the requests served within a certain time (ms) 50% 9 66% 11 75% 12 80% 12 90% 15 95% 17 98% 20 99% 23 100% 62 (longest request)

Page 13: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

drop.org thème par défaut–

Page 14: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 1.0 15/01/2001–● Naissance des concepts de module, hook et weight

● Nommage explicite des hooks $module = array("help" => "box_help", "block" => "box_block", "admin" => "box_admin");

● Apparition d'un registre de fonctions, le repository● 7 hooks : admin block cron export help page user

● Apparition du module block● Séparation block vs custom block vs box● Apparition des régions, header et footer sont à part.● Sélection des blocs optionnels par l'utilisateur

● Passage au layout de fichiers « classique » :● includes/, modules/, scripts/, themes/● apparition d'un .htaccess et d'un robots.txt

Page 15: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 1 block_help()–

● Blocks are the boxes visible in the side bars on the left and the right-hand side of the website.

● They are either exported by the engine or by any of the available modules. […] 

● The placement of blocks is delegated to the administrator but for most blocks, i.e. those called "custom blocks", the sole force behind enabling and disabling them is the user itself.

● An administrator can lay out and arrange the available blocks to fit in two regions: "left" and "right". Regions simply contain blocks. In addition, an administrator can assign each block (within a region) a weight to sort them vertically. [...]

● As mentioned above, blocks can be arranged to fit in two regions: left and right. For theme builders, each region is identified by a corresponding constant: "left" and "right". admin.php?mod=block&op=help

Page 16: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 1 - box_help()

● […] Simply put, boxes are small bits of text, HTML or PHP code which will get plugged into the site just like any other block. Boxes are typically used to add custom blocks to the site.

● Each box consists of a subject and an associated block of text, HTML or PHP code which can be as long as you want it to be and that will 'render' the content of the box.

● … mais Theme::box() existe toujours !admin.php?mod=box&op=help

Page 17: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 1 cycle de page–● pas de front controller, mais module.php?mod=..● le contrôleur

● charge les fonctions communes de common.inc – la configuration : getenv("HTTP_HOST") .".conf";– le thème : $theme = load_theme();

● définit ses fonctions● s'il a des variantes, switch ($op)

– invoque ses fonction d'action en fonction de $op● l'action

– prépare ses données– demande au thème de construire sa vue :

● $theme->header();● $theme->box() multiples des données préparées (account.php)

– ou formatage moins propre... (search.php)● $theme->footer();

Page 18: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 1 - positionnement● L'interface d'administration permet de choisir entre 3

layouts :● Left + Content● Left + Content + Right● Content + Right

● L'administrateur décide des blocs custom à afficher dans left et right.

● Theme::header() et Theme::footer() décident des blocs à afficher dans leurs éléments prédéfinis header et footer, qui ne sont pas des régions.

● Les layouts sont indépendants du thème, la table blocks ne stocke pas de variation de positionnement par thème

Page 19: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 1 block overview–

Affichage des titres de blocs actifs et non seulement des régions

Page 20: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 1 : hook de bloc● Un seul hook : hook_block() renvoie un hash de :

● subject : titre affiché● content : contenu brut, HTML, ou PHP à exécuter● info : titre administratif● link : URL, affiché uniquement dans l'administration

● Il sert à la fois pour l'administration et l'affichage● Exemple de box.module function box_block() { $result = db_query("SELECT * FROM boxes"); $i = 0; while ($block = db_fetch_object($result)) { $blocks[$i]["subject"] = check_output($block->subject); $blocks[$i]["content"] = ($block->type == 2) ? eval($block->content) : check_output($block->content, ($block->type == 1) ? 0 : 1); $blocks[$i]["info"] = check_output($block->info); $blocks[$i]["link"] = check_output($block->link); $i++; } return $blocks; }

Page 21: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 1 : thème de box● themes/marvin/marvin.theme function box($subject, $content) { ?>

<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" BGCOLOR="<? echo $this->brcolor1; ?>" WIDTH="100%"> <TR><TD><? print "<TABLE BORDER=\"0\" CELLPADDING=\"3\" CELLSPACING=\"1\" WIDTH=\"100%\">"; print " <TR><TD ALIGN=\"center\" BGCOLOR=\"$this->bgcolor1\" NOWRAP><FONT COLOR=\"$this->fgcolor1\"><B>$subject</B></FONT></TD></TR>"; print " <TR><TD BGCOLOR=\"$this->bgcolor2\">$content</TD></TR>"; print "</TABLE>"; ?> </TD></TR> </TABLE><BR><? }● Plus de fichiers de thèmes hors classes

Les thèmes sont toujours des classes PHP, mais dans <theme>.theme

Page 22: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 1 ab -n10000 -c10 (home)–Server Software: Apache/2.2.22Server Hostname: drop1Server Port: 80

Document Path: /Document Length: 4553 bytes

Concurrency Level: 10Time taken for tests: 6.388 secondsComplete requests: 10000Failed requests: 0Write errors: 0Total transferred: 49950000 bytesHTML transferred: 45530000 bytesRequests per second: 1565.36 [#/sec] (mean)Time per request: 6.388 [ms] (mean)Time per request: 0.639 [ms] (mean, across all concurrent requests)Transfer rate: 7635.70 [Kbytes/sec] received

Connection Times (ms) min mean[+/-sd] median maxConnect: 0 0 0.1 0 4Processing: 2 6 2.8 6 33Waiting: 2 6 2.8 6 33Total: 2 6 2.8 6 33

Percentage of the requests served within a certain time (ms) 50% 6 66% 7 75% 8 80% 8 90% 10 95% 11 98% 14 99% 16 100% 33 (longest request)

Page 23: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 1 thème UnConeD–

Page 24: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 2.0 15/03/2001 (2 mois)–

● Le filtrage de box remonte du modèle au contrôleur● Celui de block reste sur le modèle

● Le subject de block devient traduisible● Pas de changements majeurs côté block/box

● Layout : apparition de misc/ ● Abandon des « short tags » PHP● Premier bleu : la « goutte » pre-Druplicon dans le thème UnConeD● Theme::abstract() devient Theme::story()● class Story extends Node { … }● Apparitions :

– locale– premier script d'update, en SQL– CHANGELOG, CREDITS

● Evolutions : comment, section, user ratings, permissions● Premier module optionnel : submission

Page 25: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 2 ab -n10000 -c10 (home)–Server Software: Apache/2.2.22Server Hostname: drop2Server Port: 80

Document Path: /Document Length: 5919 bytes

Concurrency Level: 10Time taken for tests: 8.921 secondsComplete requests: 10000Failed requests: 0Write errors: 0Total transferred: 63570000 bytesHTML transferred: 59190000 bytesRequests per second: 1120.93 [#/sec] (mean)Time per request: 8.921 [ms] (mean)Time per request: 0.892 [ms] (mean, across all concurrent requests)Transfer rate: 6958.77 [Kbytes/sec] received

Connection Times (ms) min mean[+/-sd] median maxConnect: 0 0 0.1 0 4Processing: 2 9 3.5 8 32Waiting: 2 9 3.5 8 32Total: 2 9 3.5 8 32

Percentage of the requests served within a certain time (ms) 50% 8 66% 10 75% 11 80% 12 90% 14 95% 15 98% 18 99% 20 100% 32 (longest request)

Page 26: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 2 thème UnConeD–

Page 27: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 3.0.2 26/11/2001 (8 mois)–● Les blocs fournis par les modules...

● peuvent être désactivés, optionnels ou obligatoires● … comme les boxes● apparaissent dans la prévisualisation des régions

● Pas de changements majeurs côté block/box● Apparitions :

– node, file, cache (de pages), form_*()– Front : thèmes fluides : Goofy, Jeroen, Yaroon, nu : Stone Age

● Evolutions– hooks : global $repository → function_exists()– Druplicon de face remplace la goutte– section meta et introduit une hiérarchie→– faq book et introduit une hiérarchie→– Element <font> : 74 14.→

Page 28: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 3 configuration des blocs–

Page 29: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 3.0.2 thème de box–● Thème par défaut : ● class Theme extends BaseTheme { /* ..snip.. */ function box($subject, $content, $region = "main") { ?> <TABLE> <TR> <TD> <DIV ALIGN="center"> <BIG><? echo $subject; ?></BIG> </DIV> <HR> </TD> </TR> <TR> <TD> <?php echo $content; ?> </TD> </TR> </TABLE> <BR><?php } // close box function}

Pour les curieux...class BaseTheme { function links(…) {…} function image($name) {} function comment_controls(…) {}}

Page 30: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 3 ab -n10000 -c10 (home)–Server Software: Apache/2.2.22Server Hostname: drop3Server Port: 80

Document Path: /Document Length: 4338 bytes

Concurrency Level: 10Time taken for tests: 13.971 secondsComplete requests: 10000Failed requests: 15 (Connect: 0, Receive: 0, Length: 15, Exceptions: 0)Write errors: 0Total transferred: 47793825 bytesHTML transferred: 43413825 bytesRequests per second: 715.75 [#/sec] (mean)Time per request: 13.971 [ms] (mean)Time per request: 1.397 [ms] (mean, across all concurrent requests)Transfer rate: 3340.65 [Kbytes/sec] received

Connection Times (ms) min mean[+/-sd] median maxConnect: 0 0 0.1 0 5Processing: 4 14 4.6 13 44Waiting: 4 14 4.6 13 44Total: 4 14 4.6 13 44

Percentage of the requests served within a certain time (ms) 50% 13 66% 15 75% 16 80% 17 90% 20 95% 23 98% 25 99% 28 100% 44 (longest request)

Page 31: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 3 nouveaux thèmes–

Page 32: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 4.0 08/12/2002 (12 mois)–● Plus d'admin séparée bloc/box, plus de module box● Position définie par block, colonnes region/weight

● configuré par l'administrateur● fallback automatique d'une régions sur l'autre

● Visibilité définie par block, colonne path (regex)● Contenu défini par box, y compris format ASCII / HTML / PHP● BaseTheme::box() fournit un thème de box par défaut● Et par ailleurs...

● Apparitions : – Thème default == Basic. – Formulaire de node bi-colonne, différent entre FO / BO– XML-RPC, version Useful Inc.

● Evolutions– meta/section/category taxonomy/vocabulary/term→– Formats de saisie par node, dans la table additionnelle du CT– Home personnalisable en PHP eval.– généralisation du contrôleur module.php, mais pas intégrale– DB API basée sur PEAR:DB, support de PostgreSQL, dump inclut MAJ– Retrait thèmes: Dries, Jeroen, Stone Age example→

Page 33: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 4.0 admin des blocs–

Page 34: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 4.0 node form FO Basic–

Page 35: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 4.0 node form BO–

Page 36: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 4 ab -n10000 -c10 (home)–Server Software: Apache/2.2.22Server Hostname: drop4Server Port: 80

Document Path: /Document Length: 8714 bytes

Concurrency Level: 10Time taken for tests: 32.101 secondsComplete requests: 10000Failed requests: 0Write errors: 0Total transferred: 91560000 bytesHTML transferred: 87140000 bytesRequests per second: 311.52 [#/sec] (mean)Time per request: 32.101 [ms] (mean)Time per request: 3.210 [ms] (mean, across all concurrent requests)Transfer rate: 2785.42 [Kbytes/sec] received

Connection Times (ms) min mean[+/-sd] median maxConnect: 0 0 0.1 0 3Processing: 9 32 11.6 31 225Waiting: 9 32 11.5 30 222Total: 9 32 11.6 31 225

Percentage of the requests served within a certain time (ms) 50% 31 66% 34 75% 37 80% 40 90% 46 95% 51 98% 59 99% 64 100% 225 (longest request)

Page 37: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 4.1 25/06/2003 (6 mois)–● Les blocs ne sont construits que s'ils sont affichés● La sélection des blocs disponibles par utilisateur est triée par module/delta et plus par nom

● Le name de block (alias $block->info) est retiré, donc...● La table blocks n'a plus de PK, ni même d'index

● Et par ailleurs...● Apparitions :

– profile● Evolutions

– refactoring du markup dans les thèmes : plus de flexibilité réutilisable : ● theme_mark, ● theme_head, ● theme_item_list, ● theme_error ...

CHANGELOG indique 15/02/2003, mais les commits 25/06/2003

Page 38: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 4.1 tri utilisateur des blocs–

Page 39: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 4.1 construction paresseuse–● La construction des blocs à l'affichage dans theme_blocks n'a plus lieu que lorsqu'ils doivent être

affichés : obligatoires, ou par défaut et utilisateur anonyme, ou sélectionnés, mais uniquement sans chemin ou si le chemin correspond.

● function theme_blocks($region, &$theme) { global $user, $PHP_SELF; $result = db_query("SELECT * FROM blocks WHERE (status = '1' OR custom = '1') ". ($region != "all" ? "AND region = '%s' " : "") ."ORDER BY weight, module", $region == "left" ? 0 : 1); while ($result && ($block = db_fetch_object($result))) { if ( ( ($block->status && (!$user->uid || !$block->custom)) || ($block->custom && $user->block[$block->module][$block->delta])) && (!$block->path || preg_match("|$block->path|", $PHP_SELF)) ) { $block_data = module_invoke($block->module, "block", "view", $block->delta); if ($block_data["content"]) { $theme->box($block_data["subject"], $block_data["content"], $region); } } }}

Page 40: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 4.1 ab -n10000 -c10 (home)–Server Software: Apache/2.2.22Server Hostname: drop4Server Port: 80

Document Path: /Document Length: 1517 bytes

Concurrency Level: 10Time taken for tests: 15.174 secondsComplete requests: 10000Failed requests: 0Write errors: 0Total transferred: 19590000 bytesHTML transferred: 15170000 bytesRequests per second: 659.03 [#/sec] (mean)Time per request: 15.174 [ms] (mean)Time per request: 1.517 [ms] (mean, across all concurrent requests)Transfer rate: 1260.79 [Kbytes/sec] received

Connection Times (ms) min mean[+/-sd] median maxConnect: 0 0 0.1 0 5Processing: 5 15 4.9 14 70Waiting: 5 15 4.9 14 70Total: 5 15 4.9 14 70

Percentage of the requests served within a certain time (ms) 50% 14 66% 16 75% 18 80% 19 90% 22 95% 24 98% 27 99% 29 100% 70 (longest request)

Page 41: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 4.2 04/10/2003 (4.5 mois)–● hook_block($op) $op = list|view● Block delta : int varchar(32)→● Block preview : « Themes with (right|left)-sidebar only... »● t('messages du code de block.module')● BaseTheme::box() reçoit des données filtrées● BaseTheme::block($subject, $content, $region = 'main')

● Simple wrapper de BaseTheme::box()● Mais séparée dans Xtemplate, et appelée par theme_blocks() au lieu de theme('box').

● Et par ailleurs...● Apparitions :

– Support Microsoft SQL Server– index.php devient le contrôleur frontal pour tous les chemins « normaux »– Xtemplate, moteur et thème. theme() remplace theme_invoke() : – seul system.module utilise $theme->foo(), les autres utilisent theme('foo')

● Evolutions– clean URLs– support WYSIWYG (!)– intégration du BO dans l'espace unifié– Thèmes : retrait de Goofy

● le bleu commence à dominer● premiers fichiers CSS

– plus de register_globals = On

Page 42: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 4.2 block admin–

Page 43: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 4.2 BaseTheme::box()–● Drupal 4.1 : function box($subject, $content, $region = "main") { $output = "<b>" . check_output($subject) ."</b><br />" . check_output($content) ."<p />"; print $output; }

● Drupal 4.2 function box($subject, $content, $region = "main") { $output = "<p><b>$subject</b><br />$content</p>"; print $output; } function block($subject, $content, $region = "main") { global $theme; $theme->box($subject, $content, $region); }

Page 44: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 4.2 - XTemplate

Page 45: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 4.2 ab -n10000 -c10 (home)–Server Software: Apache/2.2.22Server Hostname: drop4Server Port: 80

Document Path: /Document Length: 3651 bytes

Concurrency Level: 10Time taken for tests: 22.128 secondsComplete requests: 10000Failed requests: 0Write errors: 0Total transferred: 41080000 bytesHTML transferred: 36510000 bytesRequests per second: 451.92 [#/sec] (mean)Time per request: 22.128 [ms] (mean)Time per request: 2.213 [ms] (mean, across all concurrent requests)Transfer rate: 1812.97 [Kbytes/sec] received

Connection Times (ms) min mean[+/-sd] median maxConnect: 0 0 0.1 0 6Processing: 6 22 7.6 21 154Waiting: 6 22 7.6 21 154Total: 6 22 7.6 21 154

Percentage of the requests served within a certain time (ms) 50% 21 66% 24 75% 26 80% 27 90% 31 95% 35 98% 39 99% 42 100% 154 (longest request)

Page 46: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 4.3.x 01/11/2003 (0.75 mois)–● UX : admin/block → admin/system/block● Et par ailleurs...

● Versions mineures 4.3.0, 4.3.1, 4.3.2, 4.3.x HEAD non releasée jusqu'à 02/2004

● Apparitions : – Alias– Préfixes de base de données avec {}

● Evolutions– Simplification de l'objet User– Certaines actions de contrôleur font return au lieu de print.

Page 47: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 4.3.x R.A.S–

Et c'est tout pour 4.3 !

Page 48: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 4.3 ab -n10000 -c10 (home)–Server Software: Apache/2.2.22Server Hostname: drop4Server Port: 80

Document Path: /Document Length: 3460 bytes

Concurrency Level: 10Time taken for tests: 15.036 secondsComplete requests: 10000Failed requests: 0Write errors: 0Total transferred: 39170000 bytesHTML transferred: 34600000 bytesRequests per second: 665.06 [#/sec] (mean)Time per request: 15.036 [ms] (mean)Time per request: 1.504 [ms] (mean, across all concurrent requests)Transfer rate: 2543.97 [Kbytes/sec] received

Connection Times (ms) min mean[+/-sd] median maxConnect: 0 0 0.1 0 3Processing: 5 15 4.5 14 44Waiting: 5 15 4.5 14 44Total: 5 15 4.5 14 44

Percentage of the requests served within a certain time (ms) 50% 14 66% 16 75% 18 80% 18 90% 21 95% 23 98% 26 99% 28 100% 44 (longest request)

Page 49: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 4.4.x 01/04/2004 (2 mois)–● theme_blocks() délègue

● la liste des blocs à block_list() au lieu de requêter elle-même● le rendu à theme_block('view') au lieu d'invoquer hook_block('view')

● theme('box') plus défini sauf theme.inc et Xtemplate● L'absence de PK sur blocks est identifiée come « (bad) ! »● Et par ailleurs...

● Performance– Contrôle de charge générique avec throttle.module : désactivation de modules ou

fonctions– Chargement de modules limité sur les pages cachées– Locale limite la taille des données cachées

● Apparitions : – Pushbutton

● Evolutions– Uniformisation de theme() et des fonctions theme_* et de return– Retrait des classes de thème– Retrait du support Microsoft SQL Server– Thèmes :

● Marvin Chameleon + sous-thème→● Retrait de Goofy

Page 50: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 4.4 - theme_blocks()● Drupal 4.3 :

● cf Drupal 4.1 : db_query() + test compliqué ● Drupal 4.4

● délégation à block_list pour la liste, theme_block pour le rendu

function theme_blocks($region) { $output = '';

if ($list = module_invoke('block', 'list', $region)){ foreach ($list as $key => $block) { // $key == <i>module</i>_<i>delta</i> $output .= theme('block', $block); } } return $output;}

Page 51: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 4.4 - theme_block()

function theme_block($block) { $output = "<div class=\"block block-$block->module\" id=\"block-$block->module-$block->delta\">\n"; $output .= " <h2 class=\"title\">$block->subject</h2>\n"; $output .= " <div class=\"content\">$block->content</div>\n"; $output .= "</div>\n"; return $output;}

Page 52: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 4.4 Thème Chameleon–

Page 53: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 4.4 ab -n10000 -c10 (home)–Server Software: Apache/2.2.22Server Hostname: drop4Server Port: 80

Document Path: /Document Length: 2951 bytes

Concurrency Level: 10Time taken for tests: 20.207 secondsComplete requests: 10000Failed requests: 0Write errors: 0Total transferred: 34080000 bytesHTML transferred: 29510000 bytesRequests per second: 494.87 [#/sec] (mean)Time per request: 20.207 [ms] (mean)Time per request: 2.021 [ms] (mean, across all concurrent requests)Transfer rate: 1646.99 [Kbytes/sec] received

Connection Times (ms) min mean[+/-sd] median maxConnect: 0 0 0.1 0 13Processing: 7 20 11.5 19 445Waiting: 7 20 11.4 19 434Total: 7 20 11.5 19 446

Percentage of the requests served within a certain time (ms) 50% 19 66% 21 75% 23 80% 24 90% 26 95% 29 98% 33 99% 37 100% 446 (longest request)

Page 54: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 4.5 18/10/2004 (6 mois)–● Nouveaux blocs dans comment, taxonomy● theme_(block|blocks|box) : pas de changement● Et par ailleurs...

● nouveau système de menu avec cache, hook_menu($may_cache)● rôles multiples par utilisateur● Apparitions :

– Thèmes : bluemarine● Evolutions

– SQL : connections multiples. PostgreSQL : abandon PEAR:DB– Thème : réorganisation,

● moteurs, templates, styles, ● settings● screenshots● retrait de XTemplate (le thème) et Pure

– i18n : 100 % UI

Page 55: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 4.5 - Marvin

Page 56: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 4.5 ab -n10000 -c10 (home)–Server Software: Apache/2.2.22Server Hostname: drop4Server Port: 80

Document Path: /Document Length: 5462 bytes

Concurrency Level: 10Time taken for tests: 28.487 secondsComplete requests: 10000Failed requests: 0Write errors: 0Total transferred: 60070000 bytesHTML transferred: 54620000 bytesRequests per second: 351.03 [#/sec] (mean)Time per request: 28.487 [ms] (mean)Time per request: 2.849 [ms] (mean, across all concurrent requests)Transfer rate: 2059.24 [Kbytes/sec] received

Connection Times (ms) min mean[+/-sd] median maxConnect: 0 0 0.1 0 3Processing: 8 28 7.5 27 195Waiting: 8 28 7.5 27 195Total: 8 28 7.5 28 195

Percentage of the requests served within a certain time (ms) 50% 28 66% 30 75% 32 80% 34 90% 38 95% 41 98% 46 99% 50 100% 195 (longest request

Page 57: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 4.6 15/04/2005 (6 mois)–● Nouveaux paramètres de block :

● visibility– Précédemment : partout ou sur une regex– 4.6 : sur.. ou sauf.. (mais pas encore ou PHP)– les chemins décodent les alias

● types– Partout ou sur ces types de contenu

● Nouveaux $op de hook_block() : configure, save● theme_(block|blocks|box) inchangé● Et par ailleurs...

● Support PHP 5, UTF-8 généralisé● Home : 92ms sans cache de page, 19ms avec...● Disparition du contrôleur admin.php● Retrait de Pear:DB● Apparitions :

– Contact, ImageAPI● Evolutions

– Premiers refactorings d'utilisabilité

Page 58: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 4.6 Configuration de bloc–

Page 59: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 4.6 ab -n10000 -c10 (home)–Server Software: Apache/2.2.22Server Hostname: drop4Server Port: 80

Document Path: /Document Length: 8763 bytes

Concurrency Level: 10Time taken for tests: 18.530 secondsComplete requests: 10000Failed requests: 9999 (Connect: 0, Receive: 0, Length: 9999, Exceptions: 0)Write errors: 0Total transferred: 920361989 bytesHTML transferred: 916920711 bytesRequests per second: 539.67 [#/sec] (mean)Time per request: 18.530 [ms] (mean)Time per request: 1.853 [ms] (mean, across all concurrent requests)Transfer rate: 48505.27 [Kbytes/sec] received

Connection Times (ms) min mean[+/-sd] median maxConnect: 0 0 0.1 0 11Processing: 5 18 8.3 17 199Waiting: 4 13 6.4 12 160Total: 5 18 8.3 17 199

Percentage of the requests served within a certain time (ms) 50% 17 66% 19 75% 21 80% 22 90% 25 95% 28 98% 33 99% 42 100% 199 (longest request)

Page 60: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 4.7 01/05/2006 (11 mois)–● Positionnement des block dans les régions custom par thème● Les régions sont identifiées par nom, plus par numéro● Visibilité des blocs en PHP en plus des chemins● Formats de saisie sur les box. ● theme_(block|blocks|box) inchangé● Et par ailleurs...

● Apparitions : – PHPTemplate, et retrait de Xtemplate– mode offline– JS : AJAX, effet de collapse, resize..– Form API : émergence des tableaux de tableaux de tableaux...

● Evolutions– « loose caching » de page, cache de variables, cache dans les modules (archive)– Taxonomy : free tagging, contact global– Bluemarine et Pushbutton en PHPTemplate– Retrait de la modération, des révisions de nodes– Upgrade extensible par les modules– XML-RPC en propre– SQL : retrait des procédures stockées PostgreSQL– Retrait de queue

Page 61: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 4.7 01/05/2006 (11 mois)–● Positionnement des block dans les régions custom par thème● Les régions sont identifiées par nom, plus par numéro● Visibilité des blocs en PHP en plus des chemins● Formats de saisie sur les box. ● Et par ailleurs...

● Apparitions : – PHPTemplate, et retrait de Xtemplate– mode offline– JS : AJAX, effet de collapse, resize..– Form API : émergence des tableaux de tableaux de tableaux...

● Evolutions– « loose caching » de page, cache de variables, cache dans les modules (archive)– Taxonomy : free tagging, contact global– Bluemarine et Pushbutton en PHPTemplate– Retrait de la modération, des révisions de nodes– Upgrade extensible par les modules– XML-RPC en propre– SQL : retrait des procédures stockées PostgreSQL– Retrait de queue

Page 62: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 4.7 templates de blocs–

● Bluemarine 4.6<!-- BEGIN: block --> <div class="block block-{module}" id="block-{module}-{delta}"> <h2 class="title">{title}</h2> <div class="content">{content}</div> </div><!-- END: block -->

● Bluemarine 4.7<div class="<?php print "block block-$block->module" ?>" id="<?php print "block-$block->module-$block->delta"; ?>"> <h2><?php print $block->subject ?></h2> <div class="content"><?php print $block->content ?></div></div>

Page 63: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 4.7 custom blocks–

Page 64: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 4.7 ab -n10000 -c10 (home)–Server Software: Apache/2.2.22Server Hostname: drop4Server Port: 80

Document Path: /Document Length: 4863 bytes

Concurrency Level: 10Time taken for tests: 10.249 secondsComplete requests: 10000Failed requests: 0Write errors: 0Total transferred: 53820228 bytesHTML transferred: 48630000 bytesRequests per second: 975.74 [#/sec] (mean)Time per request: 10.249 [ms] (mean)Time per request: 1.025 [ms] (mean, across all concurrent requests)Transfer rate: 5128.37 [Kbytes/sec] received

Connection Times (ms) min mean[+/-sd] median maxConnect: 0 0 0.1 0 3Processing: 3 10 3.6 10 82Waiting: 3 10 3.6 10 82Total: 3 10 3.6 10 84

Percentage of the requests served within a certain time (ms) 50% 10 66% 11 75% 12 80% 13 90% 14 95% 16 98% 18 99% 19 100% 84 (longest request)

Page 65: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 5.0 15/01/2007 (8 mois)–● Filtrage de visibilité de block par rôle● hook_block('view') ne renvoie plus forcément le titre, il vient alors

de block_list() qui le passe à check_plain()● theme_(block|blocks|box) inchangé● La prévisualisation des blocs est intégrée à leur admin● Et par ailleurs...

● Apparitions : – Installateur en ligne, plus de chargement de dump, localisé

● Profils d'installation– Fichiers .info pour les modules, dépendances– jQuery 1.0.4– Thèmes : Garland, Minelli, color.module, thème d'admin, CSS de modules

● Evolutions– Performance : sessions, node_access, fast404, cache agressif

● Sessions dans Memcached– 52 ms hors cache, 7 ms cache normal, 5 ms cache agressif– Layout de fichiers : 1 répertoire par module core, sites/all– Plugins de cache, bins de cache multiples– Page d'état, mail altérables, modules désinstallables, bulk ops– PHPTemplate override

Page 66: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 5 block admin + preview–

Pushbutton

Page 67: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 5 visibilité par rôle–

Bluemarine

Page 68: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 5.0 ab -n10000 -c10 (home)–Server Software: Apache/2.2.22Server Hostname: drop5Server Port: 80

Document Path: /Document Length: 4172 bytes

Concurrency Level: 10Time taken for tests: 5.523 secondsComplete requests: 10000Failed requests: 0Write errors: 0Total transferred: 47180102 bytesHTML transferred: 41720000 bytesRequests per second: 1810.69 [#/sec] (mean)Time per request: 5.523 [ms] (mean)Time per request: 0.552 [ms] (mean, across all concurrent requests)Transfer rate: 8342.63 [Kbytes/sec] received

Connection Times (ms) min mean[+/-sd] median maxConnect: 0 0 0.0 0 1Processing: 2 5 3.6 5 110Waiting: 2 5 3.6 5 110Total: 2 5 3.6 5 111

Percentage of the requests served within a certain time (ms) 50% 5 66% 6 75% 6 80% 7 90% 8 95% 9 98% 10 99% 12 100% 111 (longest request)

Page 69: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 6.0 13/02/2008 (13 mois)–● block cache● theme_block() → modules/system/block.tpl.php● theme_(box|blocks) inchangés, box.tpl.php existe● visibilité block par page externalisée dans drupal_match_path()● {blocks} PK subrogéesur bid et clef sur module/delta/theme● Et par ailleurs...

● Apparitions : – hook_watchdog, syslog

● Evolutions– 47ms no cache, 46ms cache blocks, 6.5ms cache normal, 5.9ms cache agressif– Performance :

● hook_menu() sans $may_cache● SQL : Schema API, réduction des privilèges: temporary, lock tables● split fichiers, .admin.inc, JS aggregator, support reverse proxy

– Qualité : E_ALL, UX, core = 6.x, batch API, HTML Corrector– Industrialisation : scripts/drupal.sh– Sécurité : php.module, test mots de passe, OpenID, update– Thèmes :

● .info, templates sans fonction, preprocess hooks● jQuery 1.2.3

– i18n : RTL, détection, traduction de contenus, alias, JS UI

Page 70: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 6.0 cache de blocs–

Normal

Avec node_access

Page 71: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 6 cache + throttle de blocs–if ($block->enabled && $block->page_match) { // Check the current throttle status and see if block should be displayed // based on server load. if (!($block->throttle && (module_invoke('throttle', 'status') > 0))) { // Try fetching the block from cache. Block caching is not compatible with // node_access modules. We also preserve the submission of forms in blocks, // by fetching from cache only if the request method is 'GET'. if (!count(module_implements('node_grants')) && $_SERVER['REQUEST_METHOD'] == 'GET' && ($cid = _block_get_cache_id($block)) && ($cache = cache_get($cid, 'cache_block'))) { $array = $cache->data; } else { $array = module_invoke($block->module, 'block', 'view', $block->delta); if (isset($cid)) { cache_set($cid, $array, 'cache_block', CACHE_TEMPORARY); } } } /* … snip … */}

Q1 : pourquoi ?Q2 : composants du cid ?

Page 72: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

* The block cache is cleared in cache_clear_all(), and uses the same clearing * policy than page cache (node, comment, user, taxonomy added or updated...). * Blocks requiring more fine-grained clearing might consider disabling the * built-in block cache (BLOCK_NO_CACHE) and roll their own. * * user 1 is excluded from block caching. */

/* This setting should be used: * - for simple blocks (notably those that do not perform any db query), where querying the db cache would be more expensive than directly generating the content. * - for blocks that change too frequently. */define('BLOCK_NO_CACHE', -1);

Drupal 6.0 règles de cache–/* This is the default setting, used when the block does not specify anything. */define('BLOCK_CACHE_PER_ROLE', 0x0001);

/* The block can change depending on the user viewing the page. Can be resource-consuming for sites with many users */define('BLOCK_CACHE_PER_USER', 0x0002);

/* The block can change depending on the page being viewed. */define('BLOCK_CACHE_PER_PAGE', 0x0004);

/* The block is the same for every user on every page where it is visible. */define('BLOCK_CACHE_GLOBAL', 0x0008);

Quiz : quel conseil manque ?

Page 73: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 6.0 ab -n10000 -c10 (home)–Server Software: Apache/2.2.22Server Hostname: drop6Server Port: 80

Document Path: /Document Length: 0 bytes

Concurrency Level: 10Time taken for tests: 4.690 secondsComplete requests: 10000Failed requests: 0Write errors: 0Non-2xx responses: 10000Total transferred: 3230000 bytesHTML transferred: 0 bytesRequests per second: 2132.20 [#/sec] (mean)Time per request: 4.690 [ms] (mean)Time per request: 0.469 [ms] (mean, across all concurrent requests)Transfer rate: 672.56 [Kbytes/sec] received

Connection Times (ms) min mean[+/-sd] median maxConnect: 0 0 0.0 0 1Processing: 1 5 2.3 4 50Waiting: 1 5 2.3 4 50Total: 1 5 2.3 4 51

Percentage of the requests served within a certain time (ms) 50% 4 66% 5 75% 5 80% 6 90% 7 95% 9 98% 11 99% 12 100% 51 (longest request)

Page 74: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 7.0 05/01/2011 (35 mois)–● hook_block($op) → hook_block_(info|configure|save|view)● hook_block_(info|list|view[_MODULE_DELTA])_alter● block['content'] render array => cache cid n'inclut plus theme/language● block_custom.body traduisible● block_custom.format int varchar(255)→● block.api.php, block.test, block.js (vertical tabs, d'n'd)● block_theme() déclare block et plus seulement block_admin_display_form● BLOCK_CACHE_* → DRUPAL_CACHE_*● {blocks} → {block}, {boxes} → {block_custom}● Permissions :

● - use PHP for block visibility● + administer blocks

● UI :● block intègre contextual, vertical tabs, local actions, ● Régions généralisées : placement de block dans content, help... ● main content block dans → content, site mission block dans → highlighted, footer → block dans footer

● Thème● theme_box() RIP fin de la notion de – box.● block template suggestions● process

● (block).throttle RIP● block_list() remplace le join et le db_rewrite_sql par _block_load_blocks() + block_block_list_alter()● Visibilité :

● Invalidation si aucune page n'est autorisée (positif / négatif)● PHP : module_exists('php')

● Nettoyage des blocs des modules désinstallés par hook_modules_uninstalled● Alternative : drupal_set_content → drupal_add_region_content● Et par ailleurs...

– Entity API, Field API, EFQ, DBTNG, render arrays– encore plus de caches et de plugins one-off– i18n : field translation

Page 75: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 7.0 nouveautés, suite–● UI :

● block intègre contextual, vertical tabs, local actions, ● Régions généralisées : placement de block dans content, help... ● main content block dans → content, site mission block dans → highlighted, footer → block dans footer

● Prévisualisation de nouveau séparée de l'admin, sans les blocs● Thème

● theme_box() RIP fin de la notion de – box.● block template suggestions● process

● (block).throttle RIP● block_list() remplace le join et le db_rewrite_sql par _block_load_blocks() + block_block_list_alter()● Visibilité :

● Invalidation si aucune page n'est autorisée (positif / négatif)● PHP : module_exists('php')

● Nettoyage des blocs des modules désinstallés par hook_modules_uninstalled● Alternative : drupal_set_content → drupal_add_region_content● Et par ailleurs...

– Entity API, Field API, EFQ, DBTNG, render arrays– encore plus de caches et de plugins one-off– i18n : field translation– Thème : Bartik, Corolla, Seven, retour du thème nu : Stark

Page 76: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 7 block preview–

Page 77: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 7.0 ab -n10000 -c10 (home)–Server Software: Apache/2.2.22Server Hostname: drop7Server Port: 80

Document Path: /Document Length: 5826 bytes

Concurrency Level: 10Time taken for tests: 6.223 secondsComplete requests: 10000Failed requests: 0Write errors: 0Total transferred: 63250000 bytesHTML transferred: 58260000 bytesRequests per second: 1606.99 [#/sec] (mean)Time per request: 6.223 [ms] (mean)Time per request: 0.622 [ms] (mean, across all concurrent requests)Transfer rate: 9926.00 [Kbytes/sec] received

Connection Times (ms) min mean[+/-sd] median maxConnect: 0 0 0.1 0 4Processing: 2 6 2.3 6 29Waiting: 2 6 2.3 6 29Total: 2 6 2.3 6 29

Percentage of the requests served within a certain time (ms) 50% 6 66% 7 75% 7 80% 8 90% 9 95% 10 98% 12 99% 13 100% 29 (longest request)

Page 78: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 8.0 02/2014 ? (37 mois)–● Assetic● Composer● Doctrine : annotations● EasyRDF● Guzzle● PHPUnit● PSR/3● Symfony 2, ● Symfony CMF : routing (chain router)● Twig● Zend Framework 2 : escaper, feed, stdlib ● Et un peu de Drupal autour de tout ça...

Page 79: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 8 en bref...–● hook_block_info()

annotation Doctrine sur la classe de bloc→● hook_block_view() BlockPluginInterface::build()→● hook_block_configure()

→ BlockPluginInterface::blockForm()● hook_block_save()

→ BlockPluginInterface::blockSubmit()● Nouveautés

● BlockPluginInterface::access() : visibilité du bloc● BlockPluginInterface::settings() : configuration

par défaut (à la Views option_definition)● BlockPluginInterface::validate() : validation

avant submit.

Page 80: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 8 block « online users »–<?php

/** * @file * Contains \Drupal\user\Plugin\Block\UserOnlineBlock. */

namespace Drupal\user\Plugin\Block;

use Drupal\block\BlockBase;use Drupal\Component\Annotation\Plugin;use Drupal\Core\Annotation\Translation;

/** * Provides a "Who's online" block. * * @Plugin( * id = "user_online_block", * admin_label = @Translation("Who's online"), * module = "user" * ) */class UserOnlineBlock extends BlockBase { //** Overrides \Drupal\block\BlockBase::settings(). public function settings() { /* ... */ }

//** Overrides \Drupal\block\BlockBase::access(). public function access() { /* ... */ }

//** Overrides \Drupal\block\BlockBase::blockForm(). public function blockForm($form, &$form_state) { /* ... */ }

//** Overrides \Drupal\block\BlockBase::blockSubmit(). public function blockSubmit($form, &$form_state) { /* ... */ }

/** * {@inheritdoc} */ public function build() { }}

Page 81: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 8.0 statistiques Block–● Drupal 6 :

● PHP– 3 fichiers– 329 lignes commentaire– 651 lignes code

● JavaScript– 1 fichier– 20 lignes commentaire– 65 lignes code

● Drupal 7 :● PHP

– 8 fichiers– 1148 lignes commentaire– 1746 lignes code

● JavaScript– 1 fichier– 31 lignes commentaire– 105 lignes code

● Drupal 8 :● PHP

– 74 fichiers – 3016 lignes commentaire– 3943 lignes code

● YAML– 16 fichiers– 2 lignes commentaire– 353 lignes données

● JavaScript– 2 fichiers– 38 lignes commentaire– 120 lignes code

Drupal 1.0 : 4092 lignes de PHP

Page 82: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 8 - UI

● Nouvelle interface d'administration : adieu la liste kilométrique des blocs inutilisés● Interface avec les blocs actifs uniquement● page de placement des nouveaux blocs

– filtrable par module– ou visible en pour tous les modules– avec formulaire de recherche

● Simplification du formulaire de configuration● Intégration de l'admin contextuelle avec Edit inline

Page 83: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 8 block admin–

Page 84: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 8 block add–

Page 85: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

Drupal 8.0 ab -n10000 -c10 (home)–Server Software: Apache/2.2.22Server Hostname: drop8Server Port: 80

Document Path: /Document Length: 7479 bytes

Concurrency Level: 10Time taken for tests: 46.318 secondsComplete requests: 10000Failed requests: 0Write errors: 0Total transferred: 80110000 bytesHTML transferred: 74790000 bytesRequests per second: 215.90 [#/sec] (mean)Time per request: 46.318 [ms] (mean)Time per request: 4.632 [ms] (mean, across all concurrent requests)Transfer rate: 1689.04 [Kbytes/sec] received

Connection Times (ms) min mean[+/-sd] median maxConnect: 0 0 0.1 0 4Processing: 13 46 19.1 44 361Waiting: 13 46 19.0 44 361Total: 13 46 19.1 44 361

Percentage of the requests served within a certain time (ms) 50% 44 66% 50 75% 54 80% 57 90% 66 95% 74 98% 85 99% 94 100% 361 (longest request

Server Software: Apache/2.2.22Server Hostname: drop8Server Port: 80

Document Path: /Document Length: 7479 bytes

Concurrency Level: 10Time taken for tests: 32.602 secondsComplete requests: 10000Failed requests: 0Write errors: 0Total transferred: 80110000 bytesHTML transferred: 74790000 bytesRequests per second: 306.73 [#/sec] (mean)Time per request: 32.602 [ms] (mean)Time per request: 3.260 [ms] (mean, across all concurrent requests)Transfer rate: 2399.61 [Kbytes/sec] received

Connection Times (ms) min mean[+/-sd] median maxConnect: 0 0 0.1 0 2Processing: 10 33 10.0 32 190Waiting: 10 32 10.0 31 190Total: 10 33 10.0 32 190

Percentage of the requests served within a certain time (ms) 50% 32 66% 35 75% 38 80% 40 90% 44 95% 49 98% 54 99% 58 100% 190 (longest request)

Default classloader APC classloader

Page 86: Les blocs Drupal de drop.org à Drupal 8

Les blocs de Drupal 1 à Drupal 8 / © 2013 OSInet / Licence CC-BY-SA 2.0 France

ms/<home anonyme>

drop.org D1 D2 D3 D4.0 D4.1 D4.2 D4.3 D4.4 D4.5 D4.6 D4.7 D5 D6 D7 D80

5

10

15

20

25

30

35

PHP 5.3.10, MySQL 5.5, APC 3.1.9, Cache agressif, D8 APC Classloader

Page 87: Les blocs Drupal de drop.org à Drupal 8

Suivez-nous, sur Facebook, Google+, Twitter...

http://formation.osinet.fr/formation/drupal

Page 88: Les blocs Drupal de drop.org à Drupal 8

Le système de blocs de drop.org à Drupal 8

Par Frédéric G. MARAND (fgm)