Paragraphs
Le module paragraphs par l'exemple,
ou la rédaction de contenu sous stéroides
Introduction
- drupal.org/project/paragraphs
- C'est quoi paragraphs / a quoi ca sert ?
- Pourquoi cette conférence ?
ce module nous semble trop méconnu et sous utilisé
La génèse sur #drupal-fr
(13:27:41) opi> J'ai presque envie de proposer une conférence
sur le module *paragraphs*, en mode retour d'xp,
exemple de ce qu'on peut faire de foufou avec paragraph ;
ca tenterai quelqu'un de la faire avec moi ?
(en mode a l'arrache, cela va sans dire)
(13:30:33) flocondetoile> opi: partant
(13:32:15) opi> cool
Avantages de paragraphs
- Réutilisation de composants
- Composition riche de pages complexes
- Atomic design !!!

- Support des révisions / multilinguisme
Conception modulaire
Ou un tout petit peu ;-)
- Les champs d'un paragraph mixent contenus et configuration
- Multiplication des champs et des tables dans la bdd (penser aux configurations communes)
- UI/UX peut être confuse

- On ne peut pas connaître à l'avance quels paragraphes sont disponibles sur un contenu (SEO, Page listing, etc.)
## Usages de paragraphes
- Adieu le body fourre-tout
- Composition d'un contenu riche
- Composition de pages avec des agencements complexes et maîtrisés
- Donner accès aux éditeurs à des agencements de page d'atterrissage / immersives (composition modulaire)
Un exemple de page fait avec un seul type de paragraphe
## Paragraphs vs Panel / Display Suite
- Panel / display suite : approche Site builder. Nécessité de droits avancés pour configurer des pages
- Paragraphs : on peut déléguer au rédacteur toute la mise en page, tout en conservant la maîtrise du rendu et du comportement responsive
Un grand pouvoir implique de grandes responsabilités
Maître Gims
Un grand pouvoir implique...
...de grandes responsabilités
## Types de paragraphes possibles
## Éléments de base
- texte
- titre
- separateur
- images
- bouton / lien
- chapeau, citation
## Éléments plus avancés
- container / grille
- texte + image + styles
- entity reference
- accordéon / onglets
- block reference, vers des blocs statiques
- views reference, pour listing automatiques de certains contenus
- fichiers attachés ou ressources
## Éléments plus avancés
- pictogrammes / images + texte
- video (locale/embarquée)
- diaporama / gallerie d'image
- chiffres défilants / barres de progression
- constructeur de requête / rendu
- iframe
- etc.
## Exemples réels
*Attention, démo*
Texte + image en arrière-plan
Texte + image droite / gauche
Conteneur
+ Texte / Image au-dessus
Liste à puces avec pictos
Liste à puces avec pictos
Chiffres défilants / barres de progression
Chiffres défilants / barres de progression
Ecrire son propre paragraph
- Beaucoup de clics
- Un zeste de code
- Magic CSS :

Un zeste de code (image arrière-plan)
function MON_MODULE_preprocess_paragraph(&$variables) {
// Overlay / background.
$variables['overlay_color'] = FALSE;
if ($paragraph->hasField('field_paragraph_overlay')) {
if ($overlay_color = $paragraph->field_paragraph_overlay->value) {
$variables['overlay_color'] = ['#plain_text' => $overlay_color];
}
}
}
{% block paragraph %}
<div{{ attributes.addClass(classes) }}>
{% block content %}
...
{% if overlay_color %}
<div class="paragraph-overlay"
style="background-color: {{ overlay_color }};"></div>
{% endif %}
...
{% endblock %}
</div>
{% endblock paragraph %}
Magic CSS
.paragraph-overlay {
position: absolute;
height: 100%; width: 100%;
top: 0; z-index: 1;
}
.window-width .paragraph-overlay {
width: 100vw;
left: 50%; right: 50%;
margin-left: -50vw; margin-right: -50vw;
}
ajout de classes - D7
function MON_MODULE_entity_view($entity, $type, $view_mode, $langcode) {
if ($type == 'paragraphs_item'
&& $entity->bundle == 'my_paragraph_bundle') {
// Ajout d'une classe custom
$entity->content['#classes_array'][] = 'my-custom-class';
}
}
ajout de classes - D8
function MON_MODULE_preprocess_paragraph(&$variables) {
// Image position.
$variables['paragraph_attributes'] = new Attribute();
if ($paragraph->hasField('field_image_position')) {
if ($image_position = $paragraph->field_image_position->value) {
$variables['paragraph_attributes']->addClass($image_position);
}
}
}
{% block paragraph %}
<div{{ attributes.addClass(classes) }}>
{% block paragraph_wrapper %}
<div{{ paragrah_attributes.addClass('paragraph-wrapper') }}>
...
</div>
{% endblock %}
</div>
{% endblock paragraph %}
## Modules contribués pour étendre paragraphs
- [paragraphs_summary](https://www.drupal.org/project/paragraphs_summary) (D7) / [*sandbox*](https://www.drupal.org/sandbox/mtaltavull/2830717) (D8)
- [paragraphs_collection](https://www.drupal.org/project/paragraphs_collection) (D8 experimental)
- [classy_paragraphs](https://www.drupal.org/project/classy_paragraphs) (D7/D8)
- [bootstrap_paragraphs](https://www.drupal.org/project/bootstrap_paragraphs) (D8)
- [slick_paragraphs](https://www.drupal.org/project/slick_paragraphs) (D8)
- Et beaucoup de modules proposant des bundles préconfigurés
## Paragraphs summary
- [dgo.to/paragraphs_summary](https://www.drupal.org/project/paragraphs_summary) (D7)
- [sandbox/mtaltavull/2830717](https://www.drupal.org/sandbox/mtaltavull/2830717) (D8)

## Paragraphs collection
[dgo.to/paragraphs_collection](https://www.drupal.org/project/paragraphs_collection) (D8 experimental)
- Grids
- Sliders
- Style selection (a set of predefined styles)
- Background
- Lock editing
- Visibility per language
## Classy paragraphs
[dgo.to/classy_paragraphs](https://www.drupal.org/project/classy_paragraphs) (D7/D8)
- Nouveau champ *class list*
- Classes definies par `hook_classy_paragraphs_list_options`
- Classe ajoutée par `classy_paragraphs_preprocess_entity`
## Bootstrap paragraphs
[dgo.to/bootstrap_paragraphs](https://www.drupal.org/project/bootstrap_paragraphs) (D8)
- Accordion
- Carousel
- Columns
- Drupal Block
- Modal
- Tabs
- View
## Le futur de Paragraphs
- Séparer le contenu de la configuration
- Librairie réutilisable de paragraphes
- UX améliorée
- Suivez [Paragraphs Collection](https://www.drupal.org/project/paragraphs_collection)
Source : https://www.md-systems.ch/en/blog/md-systems/2017/09/20/the-evolution-of-paragraphs