Cela fait un moment que je souhaite rédiger cet article, car la gestion des pages statiques est une fonctionnalité livrée avec CakePHP mais vraiment sous utilisée !
En effet, nous avons pu voir en quoi le framework était utile pour développer rapidement des applications dynamiques, une zone d’administration sécurisée et en l’importance des conventions pour se simplifier la tâche. Sachez également que Cake vous permet en quelques minutes d’utiliser la puissance de ses helpers (Html, Javascript, Css …) et de sa structure (layouts, éléments) afin de créer en quelques minutes une application statique propre, maintenable et évolutive.
Rien ne vous empêchera par la suite de faire évoluer cette application « basique » vers des fonctionnalités dynamiques plus avancées (édition de pages, blog, forum, sondage, internationalisation …).
Le mécanisme de gestion des pages
Dans sa version de base, une application CakePHP peut utiliser le système de gestion de pages statiques livré avec le framework. Il existe un contrôleur « PagesController » qui permet de gérer automatiquement les pages statiques. C’est celui-ci que vous pourrez adapter pour ajouter par exemple de nouveaux Helpers.
Ainsi toutes les pages contenues dans le dossier « /views/pages/ » d’une application (ex : « /views/pages/url-de-la-page.ctp » seront accessibles en utilisant une adresse de type http://www.monsite.com/pages/url-de-la-page. On peut également créer des sous-dossiers : « /views/pages/categorie/ma-mapage.ctp » sera accessible par http://www.monsite.com/pages/categorie/ma-page
Par défaut, c’est d’ailleurs la page « home.ctp » qui est affichée quand vous créez votre application. Bien entendu, comme dans toute application il y aura un layout (« /views/layouts/default.ctp« ), la possibilité d’inclure des éléments (menu) etc …
Tout ceci (page par défaut, chemin d’accès etc…) se configure très simplement grâce au système de routes de Cake. Voici les routes d’origine qui permettent de fournir les services mentionnés plus haut :
/** * Here, we are connecting '/' (base path) to controller called 'Pages', * its action called 'display', and we pass a param to select the view file * to use (in this case, /app/views/pages/home.ctp)... */ Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home')); /** * ...and connect the rest of 'Pages' controller's urls. */ Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display')); Router::connect('/contact/*', array('controller' => 'pages', 'action' => 'display', 'contact')); // Exemple de raccourci spécifique
Pour modifier la page d’accueil, éditez la première des 2 routes, et la seconde vous permettra de remplacer « /pages/ » dans vos url par ce que vous voulez (ex : « /contenus/« ). J’ai ajouté une troisième route vous permettant de comprendre comment créer un « raccourci » spécifique à une page.
Les helpers et commandes à connaître
Afin de pouvoir rendre votre application statique belle et riche, vous aurez sans doute besoin de Javascript spécifique à certaines pages, de feuilles CSS adaptées, de gérer finement les meta-tags pour optimiser votre référencement … ne serait-ce que le titre !
Vous êtes pressés par le temps (car 10 minutes pour créer votre application et intégrer le design c’est déjà beaucoup
) et souhaitez avoir encore une fois un code beau et maintenable : mais on s’en doute, CakePHP à tout prévu !
Note : les lignes de code mentionnées ci-dessous sont à inclure à l’intérieur même de votre page de vue (ex : « /views/pages/categorie/ma-mapage.ctp« ).
Modification du titre de la page
Rien de plus simple, il suffit de modifier l’attribut « pageTitle » de votre page.
$this->pageTitle = 'Titre de la page';
Modification des meta-tags
Le HTMLHelper vous permet de gérer tous les types de meta-tags existants (description, keywords, robots …). Je vous recommande de regarder l’API ou la documentation pour savoir exactement quelles sont les signatures méthodes du HTMLHelper.
Pour modifier les meta-tags de votre page statique (ex : une description), vous devrez utiliser le code suivant :
// meta(string $type, string $url = null, array $attributes = array(), boolean $inline = true) $html->meta('description', null, array(), false)
Remarquez les paramètres 2 et 3 laissés à leur valeur par défaut afin de modifier le dernier (« inline ») et lui affecter la valeur false. Cela signifie que la balise ne sera pas renvoyée lors de l’appel de la fonction pour un affichage local, mais qu’il sera inclus dans l’en-tête de votre page à l’endroit où le gabarit contient l’instruction :
echo $scripts_for_layout;
Modification du CSS
De la même manière, nous utiliserons le HTMLHelper pour ajouter des feuilles CSS spécifiques dans une page :
// css(mixed $path, string $rel = null, array $htmlAttributes = array(), boolean $inline = true) $html->css('ma-feuille', null, array(), false);
Modification du gabarit (layout) de la page
De manière similaire à la personnalisation du titre présentée plus haut, nous pouvons modifier le gabarit d’une page par l’instruction :
$this->layout = 'autre-gabarit';
Insérer un script Javascript
Vous l’aurez compris il n’y a strictement rien de spécial à utiliser des pages statiques et les helpers fonctionnent normalement. Je vous invite à regarder la documentation et à faire des essais pour arriver à faire exactement ce que vous voulez.
Dernier exemple proposé ici, l’insertion d’un script javascript dans votre page :
// link($url, $inline);
$javascript->link('mon-script', false);
Un bazooka pour tuer une mouche ?
J’entends déjà les réfractaires du fond de la salle :
Mais là du coup on a 800 fichiers différents alors que 4 pages HTML auraient suffit !
C’est sûr que ça fait « gros » pour ce que c’est … mais avez-vous vu la souplesse que cela offre ? En 10 minutes tout est prêt, vous n’avez QUE le contenu des pages à modifier. Qu’en est-il de l’optimisation pour le référencement, de l’évolutivité du site réalisé ?
En effet, imaginez que ce site doive être traduit dans une autre langue : vu que vous êtes un développeur bien sage, vous avez pris l’habitude d’utiliser les méthodes gettext (__(‘Mon texte’)) et cela ne vous prendra que le temps de lancer un script shell et de traduire les chaînes. Imaginez que vous vouliez ajouter un livre d’or : 15 minutes pour créer une base de données et générer les pages CRUD avec bake. Enfin bref, vous avez compris !!!
Un framework sera forcément moins rapide en terme de performances que des pages HTML, mais votre site va-t-il recevoir tant de visiteurs que ça ? C’est assez rare pour un site statique de nos jours
Vous n’avez qu’à peser le pour et le contre … et choisir en toute connaissance de cause !
