PXPros

PXPros est un pré-processeur qui permet d'amener toute la puissance de PHP à un projet HTML statique. Il peut être utilisé pour créer des rendus de dossiers complets ou encore être utilisé en temps réel un peu comme SASS.

Installation

PXPros est un exécutable statique, il n'a besoin d'aucune dépendance. Il suffit de le placer dans dossier qui est dans les paths d'environnement ou encore ajouté son dossier dans les paths. Pour ce faire, pesez sur WIN+R et ensuite exécutez la commande sysdm.cpl

images/run-system-properties.webp images/system-properties-advance.webp images/system-variables.webp images/add-path.webp Configuration

PXPros se configure par projet. Il suffit de créer un fichier JSON (_pxpros.json) à la racine du projet.

Exemple:

{ "data": { "project": "TIM Montmorency - Documentation", "gtag": "G-P2R7T89B4B" }, "includes": [ "_includes/functions.php", "_includes/hooks.php" ], "before": "_includes/header.php", "after": "_includes/footer.php" }

data

La propriété data est un objet où vous pouvez y mettre tout ce que vous voulez. Ces données seront accessibles via la variable superglobale $PAGE.

Exemple:

echo $PAGE->project;

includes

La propriété includes est un tableau contenant les chemins des fichiers que vous voulez inclure à l'initialisation. Ils contiennent généralement toutes les fonctions et les classes que vous utilisez. Si vous utilisez des classes, il est recommandé d'utiliser le loader dynamique spl_autoload_register.

Exemple:

spl_autoload_register(function($class) { static $catalog = [ 'IMDB' => 'imdb.class.php', ]; if (isset($catalog[$class])) require_once(__DIR__ . '/' . $catalog[$class]); }, true, true);

before & after

Les propriétés before et after servent à définir les fichiers d'entête et de pied de page afin que les templates PHP ne contiennent que ce qui sera exécuté dans le corps de la page.

Format

Dans le but d'être compatible avec la configuration de base de Github Pages, les templates PHP doivent commencer par une barre de soulignement (_), exemple _index.php. Ces fichiers commençant par une barre de soulignement sont ignorés par Jekyll lors de la mise en ligne du site par Github Pages.

Entête d'un template PHP

Pour créer les propriétés, il suffit de créer un DOCBLOCK PHP en entête du template. Ces propriétés seront ajoutées à la variable superglobale $PAGE.

Exemple:

<?php /** * @type article * @title PXPros * @icon images/icon.png * @abstract PHP Preprocessor */ ?> echo $PAGE->icon; Il est aussi possible d'obtenir les propriétés d'un fichier en utilisant la fonction php_file_info($filename) $PAGE

La variable superglobale $PAGE contient les informations contenues dans la propriété data du fichier de configuration _pxpros.json situé à la racine du projet ainsi que les propriétés définies par le DOCBLOCK en entête du template PHP en cours de rendu.

root & file

Elle contient aussi les propriétés root et file afin de pouvoir se situer tant de manière absolue que relative face à la racine du projet.

Exemple:

function get_shared($file){ $backwards = count(explode('\\',str_replace($PAGE->root, '', pathinfo($file,PATHINFO_DIRNAME)))); return join('/', array_fill(0, $backwards, '..')).'/shared/'; } echo get_shared($PAGE->file); Utilisation

PXPros est très simple d'utilisation. Il peut créer le rendu d'un seul fichier ou encore d'un dossier/sous-dossier. Dans le cas d'un dossier, PXPros le parcourera de manière récursive afin d'y trouver tout les fichiers ayant le pattern _*.php.

Exemple:

> D:\Programmation\tim-montmorency\cours\manuel> pxpros .\_index.php Render: /manuel/_index.php > D:\Programmation\tim-montmorency\cours\manuel> pxpros . Render: /manuel/_index.php Render: /manuel/components/_index.php Render: /manuel/installation/_index.php Render: /manuel/page-types/_index.php Render: /manuel/pxpros/_index.php Render: /manuel/test/_index.php

En temps réel avec VS Code

Il est aussi possible de créer des rendus avec PXPros en temps réel comme du SASS/SCSS grâce à l'extension Run On Save.

Configuration VS Code:

{ "emeraldwalk.runonsave": { "autoClearConsole": true, "commands": [ { "match": ".*\\.php$", "cmd": "pxpros \"${file}\"" } ] }, } Built-in

PXPros est compilé avec la librairie SAPI de PHP. Il contient une version minimale PHP. Pas de MySQL, de Session ou d'autres trucs inutiles.

Vous pouvez consulter la configuration complète ici.