Skip to content
Extraits de code Groupes Projets

Blocks

Un plugin pour composer des pages sous forme de blocks, rangés les uns à la suite des autres (appelés parfois "lames")

[WIP] En cours de développement, des choses peuvent bouger de façon significative (cf TODO.md)

Mise à jour / migration en v2

Les types de blocks ne sont plus gérés en wysiwyg dans l'espace privé avec un constructeur de formulaire.
On se base plutôt sur le même fonctionnement que inserer_modeles, saisies ou compostions, en cherchant des fichiers .yaml dans les répertoires 'blocks' des squelettes.

Les tables spip_blocktypes et spip_blocktypes_liens ne sont donc plus utilisées.

Une procédure de mise à jour est prévue : dans l'espace privé, rendez vous sur ecrire/?exec=update_blocks2 qui vous permettra :

  • d'exporter tous les types de blocks existant en yaml dans un répertoire
  • de supprimer les tables inutiles

Le champ ancre n'est plus géré nativement sur les blocks (fonctionnalité trop spécifique)

Description

Chaque type de block a un identifiant unique (slug), qui permet de chercher un squelette dans le path sous la forme blocks/identifiant.html, sinon on prend blocks/dist.html
Dans le privé, on cherche d'abord blocks_prive/identifiant.html, ce qui permet d'avoir un affichage différent dans l'espace privé du site public (espace plus réduit en largeur, pas les même css ou js chargés)

Dans la configuration de chaque type de block :

  • on peut choisir de restreindre un type de block à un objet éditorial
    ex : un block "menu des articles de la rubrique", qu'on ne pourrait associer qu'aux rubriques)
    par défaut : aucune restriction
  • on peut définir quels types de blocks il peut contenir
    ex : un block "recette" qui pourrait contenir des blocks "ingrédient"
    par défaut : aucun (le block n'est pas un conteneur)
  • ou bien au contraire restreindre ce block à ne pouvoir être créé que dans certains types de blocks
    ex : un block "personne" ne pourrait être créé que dans un block "trombinoscope"
    par défaut : aucune restriction

Dans la configuration de chaque block :

  • on peut définir une ancre nommée, pour faire un lien direct vers ce bloc

Dans les squelettes du site public, ajouter simplement #GENERER_BLOCKS pour générer tous les blocks d'un objet.
La balise reconnait le contexte de la boucle en court, sinon on peut utiliser #GENERER_BLOCKS{objet,#ID_OBJET}

Dans le squelette d'un block "parent" (qui peut contenir des blocks), on peut déclarer un tag <!--blocks--> qui sera remplacé par les blocks enfants, ce qui permet de les encapsuler dans un markup personnalisé.
Par exemple, dans squelettes/blocks/mon_block_conteneur.html :

<div class="mon_block_conteneur">
  <h2>#ENV{titre}</h2>
  <div class="mon_block_conteneur__enfants">
    <!--blocks-->
  </div>
</div>