PageTree démo by

Développeurs

Créer un bloc en PHP

N’importe quel plugin peut fournir ses propres blocs. Un bloc est une classe PHP, un formulaire YAML et un template Twig.

Générer le bloc

La commande create:block crée les fichiers dans un plugin existant :

php artisan create:block Acme.Blog Testimonial

Elle crée, dans le plugin Acme.Blog :

FichierRôle
blocks/Testimonial.phpClasse du bloc
blocks/testimonial/config_fields.yamlFormulaire du back-office
blocks/testimonial/default.phpTemplate Twig

Le premier argument est au format Auteur.Plugin. Le nom du bloc est converti en nom de classe (my-block donne MyBlock) et son dossier porte le nom de la classe en minuscules (blocks/myblock). Il ne peut contenir que des lettres, des chiffres, - et _.

Enregistrer le bloc

Déclarez le bloc dans la méthode registerBlocks() du Plugin.php de votre plugin :

// plugins/acme/blog/Plugin.php
public function registerBlocks()
{
    return [
        'blog.testimonial' => \Acme\Blog\Blocks\Testimonial::class,
    ];
}

Le bloc apparaît dans la bibliothèque, dans le groupe portant le nom de votre plugin.

La classe du bloc

<?php namespace Acme\Blog\Blocks;

use LucasPalomba\PageTree\Classes\ComponentBase;

class Testimonial extends ComponentBase
{
    public $config_fields = 'config_fields.yaml';

    public $uniqueKey = 'blog.testimonial';

    public function componentDetails()
    {
        return [
            'label' => 'Témoignage',
            'description' => 'Citation d’un client avec son auteur',
            'icon' => 'ph ph-quotes', // icône Phosphor
        ];
    }

    // Options de la liste déroulante "style"
    public function getStyleOptions()
    {
        return ['light' => 'Clair', 'dark' => 'Sombre'];
    }

    // Variables supplémentaires pour le template, $data contient les valeurs des champs
    public function prepareVars($data = null)
    {
        $this->vars['authorUpper'] = strtoupper($data->author ?? '');
    }
}
ÉlémentRôle
$uniqueKeyType du bloc, enregistré dans les pages. Ne le changez plus une fois le bloc utilisé.
$config_fieldsNom du fichier de formulaire, dans le dossier du bloc.
componentDetails()Libellé, description et icône affichés dans la bibliothèque.
get{Champ}Options()Options d’une liste déroulante, comme pour un formulaire October.
prepareVars($data)Prépare des variables pour le template dans $this->vars.
$hiddenÀ true, le bloc n’est plus proposé dans la bibliothèque, mais les blocs existants restent affichés et modifiables.

Le formulaire (config_fields.yaml)

Les champs de formulaire standard d’October sont pris en charge, y compris les répéteurs, les sélecteurs de médias et les éditeurs riches.

fields:
    quote:
        label: Citation
        type: textarea
    author:
        label: Auteur
        type: text
        span: left
    style:
        label: Style
        type: dropdown
        span: right

La case Affiché ? (champ isActive) est ajoutée automatiquement à la fin du formulaire. Déclarez un champ isActive vous-même uniquement pour changer son libellé ou sa position.

Les valeurs default des champs sont appliquées aux nouveaux blocs, et aux champs absents des blocs existants. Les valeurs déjà enregistrées, même false, sont conservées.

Le fichier généré par create:block contient un champ title d’exemple, à remplacer par vos propres champs.

Le template (default.php)

Malgré son extension, le template est écrit en Twig. Les valeurs des champs sont dans data, les variables de prepareVars() sont directement accessibles.

<blockquote class="testimonial testimonial--{{ data.style|default('light') }}">
    <p>{{ data.quote }}</p>
    <footer>{{ authorUpper }}</footer>
</blockquote>
  • Le contenu saisi par les éditeurs n’est jamais évalué comme du Twig sur le site.
  • Pour qu’un champ texte soit modifiable en place, dans l’aperçu et sur le site, affichez-le avec le filtre pagetreeEditable : {{ data.quote|pagetreeEditable('quote', 'multiline') }}. Voir Édition sur le site.
  • Pour un champ de lien (pagefinder), utilisez pagetreeLink(data.link) : la fonction n’accepte que les liens relatifs, http(s), mailto: et tel:.
  • Pour un média, utilisez le filtre |media.

Le fichier default.php est inclus comme du PHP avant d’être compilé par Twig : c’est du code de confiance livré avec votre plugin. Ne l’alimentez jamais avec du contenu saisi par un utilisateur.

Sans écrire de plugin

Pour un bloc simple, un super utilisateur peut aussi créer un bloc personnalisé depuis le back-office.