// BLOG
Kirby CMS - Les pages models
Kirby offre de nombreuses méthodes sur l'objet Page pour retrouver et manipuler nos données. Cependant, parfois, il peut être nécessaire de soit surcharger une méthode (modifier une méthode existante) soit d'ajouter une méthode pour nos propres besoins. Pour cela, nous utiliserons les pages models.
Qu'est ce qu'une "Page model"
Une page model est un fichier PHP permettant d'étendre un type de page, c'est à dire de soit redéfinir une des méthodes existantes soit de définir une nouvelle méthode. Le type de page est définie par rapport au template auquel la page est liée.
Pour rappel une méthode correspond à une fonction en language Objet, fonction qui est disponible qu'à travers un Objet lui même instancié à partir d'une Classe. Kirby est programmé en PHP sur le paradigme du language objet.
Vous pouvez définir une page model dans un plugin (je n'aborderai pas cette méthode dans cet article) ou directement dans votre système de fichier en créant un fichier PHP que vous placerez dans un dossier /site/models
Ce fichier PHP doit porter le même nom que le template auquel est rattaché la page que vous souhaitez étendre.
Nom de la page model | Nom du template de la page à étendre |
---|---|
/site/models/project.php | /site/templates/project.php |
Comment créer une "Page model"
Une page model est un fichier PHP dans lequel on déclare une classe qui étend la classe "Page" de Kirby. Cette classe doit porter le nom du template de la page que l'on souhaite étendre suivi de "Page", le tout en un seul mot.
Exemple : pour une page rattachée au template project
la classe de la page model devra s'appeler ProjectPage
.
// /site/models/project.php
class ProjectPage extends Page {
// mon code ici pour étendre une méthode de Page ou pour créer une nouvelle méthode.
}
A chaque fois que Kirby rencontrera une page de type "project", il chargera cette page model et vous aurez accès dans vos templates, blueprints, controllers et snippets aux méthodes que vous aurez définies dans cette page model.
Si le nom de votre template comporte un tiret (mon-template.php) ou un underscore (mon_template.php) il faudra nommer la classe de votre "Page model" de cette manière MonTemplatePage
Voici quelques cas d'usages des pages model :
- Modifier le comportement d'une méthode existante
- Ajouter une méthode dont vous avez besoin pour votre application
- Factoriser du code pour ne pas le répéter à plusieurs endroits
- Mettre en forme un contenu, le stocker dans une variable et renvoyer cette variable. On pourra l'utiliser pour afficher le contenu mis en forme dans un champ "infos" d'une blueprint par exemple.
Voici un exemple concret.
Nous allons créer une méthode getDateCreation()
qui récupère la date de création de la page et la renvoie au format "dd.mm.yyyy"
// /site/models/project.php
<?php
class ProjectPage extends Page {
public function getDateCreation() {
return $this->dateCreation()->toDate('d.m.Y');
}
}
On utilise$this
dans notre classeprojectPage
pour faire référence à la classe Page étendue.
Dans mon template project.php
je pourrais appeler cette date de cette manière :
// /site/templates/project.php
<?= $page->getDateCreation(); ?>