Kohana: utilisation du contrôleur Template
Kohana dispose d'un module (donc optionnel) permettant de gérer le template de votre site. Supposons que votre page soit découpée avec un en-tête, une barre de menu, du contenu et enfin un pied de page. Ce genre de structure est monnaie courante, mais sa gestion est quelquefois fastidieuse; en effet, de façon conventionnelle, sur chacun de vos controleurs vous devrez avoir un code permettant de créer cette structure.
C'est là ou le module 'Template Controler' intervient, il permet de:
- gérer en un et un seul endroit le template de votre site tout en gardant la possibilité de faire des extensions dans des controleurs fils. Evite les redondances et améliore la clarté et la qualité du code.
- afficher la page automatiquement (auto-render)
La documentation du module est accessible sur le site de Kohana.
Etape 1: construire votre template
Prenons par exemple une page avec un titre, un menu, un contenu et enfin un pied de page. Le template général application/views/template.php peut ressembler à ça:
<html>
<head>
<title><?=$title;?></title>
</head>
<body>
<?=$menu?>
<div id='content'>
<?=$content?>
</div>
<div id='footer'>
<?=$footer?>
</div>
<body>
</html>Le menu application/views/menu.php:
Le corps application/views/content.php:
Le pied de page application/views/footer.php:
Le controleur template
Bon maintenant, il faut le créer ce fameux contrôleur! On l'appellera Website_Controller (à placer dans application/controllers/website.php), et on le fait étendre du fameux module Template_Controller comme ceci:
<<?php defined('SYSPATH') or die('No direct script access.'); class Website_Controller extends Template_Controller { // le nom du template par défaut (celui contenant la structure) public $template = 'template'; // par défaut à TRUE, affiche automatiquement le template après que la méthode du controleur soit faite public $auto_render = TRUE; public function __construct() { // Indispensable parent::__construct(); // Charger quelque dépendances pour tout le site $this->profiler = new Profiler; // Initialise les paramètres par défaut $this->template->title = 'Titre de ma page'; $this->template->menu = new View('menu'); $this->template->footer = new View('footer'); $this->template->footer->sitename = 'Kohana-school'; } public function index () { $this->template->content = new View('content'); } }
Voila, c'est déjà fini :-). Vous avez maintenant un gestionnaire de votre template principal qui affichera le panneau de debug (Profiler) et aura comme valeurs par défauts celles décrites dans le constructeur. Maintenant supposons que vous ayez un contrôleur pour votre page d'accueil, par exemple Home_Controller (dans application/controllers/home.php) qui possède de la même charte graphique que présentée précédemment:
<?php defined('SYSPATH') or die('No direct script access.'); class Home_Controller extends Website_Controller { public function __construct() { parent::__construct(); $this->template->title = 'Accueil de mon site'; } public function index () { $this->template->content = new View('content_home'); } }
On le fait donc étendre notre contrôleur Website qui contient tous nos paramètres généraux. Pour celui-ci, c'est la même chose, le profiler sera chargé, en revanche son titre ainsi que le corps de la page sont ici changés.
Voila vous n'avez plus qu'a faire ça pour toutes vos pages et c'est gagné.
Conclusion
Au travers de cet article, on a pu constater que c'était assez souple et intéressant d'utiliser le contrôleur Template. Vous souhaitez enlever le profiler de toutes vos pages -> vous l'enlevez uniquement dans le contrôleur racine Website, le nom de votre site a changé -> changez le dans le contrôleur Website.
Ca peut être aussi intéressant d'avoir plusieurs templates comme par exemple pour des sites ecommerce ou des moteurs de blog. Le site en lui-même possède un style, mais la partie d'administration est souvent représentée dans un autre style ce qui fait donc deux contrôleur Website_Controller et Admin_Controller.
Allez jetez un coup d'œil dans le contrôleur Template dans system/controllers/template.php. Et oui, seulement ces quelque lignes de codes. Commencez vous à entrapercevoir la puissance de Kohana?
Patrice Says:
Salut,
Très bien ton site et tes tutoriaux !
Dans l'ensemble ce framework est aussi flexible que CodeIgniter?
Si oui, c'est une occasion en or de faire un site OOP avec un framework puissant.
Posted on avril 8th, 2008 at 17:54
hotandspicy Says:
Merci :-).
Je dirai qu'il a la flexibilité de CodeIngiter et qu'il apporte un lot important de fonctionnalités bien pensées. Le cycle de développement est très bien, les développeurs sont super réactifs. La communauté est encore relativement faible mais vraiment à l'écoute, les problèmes sont résolus très vite.
Le seul bémol, c'est la doc qui est assez light ce qui amène parfois des difficultés à appréhender certaines fonctionnalités.
Tu peux aussi aller voir ceci: http://www.hotandspicy.fr/2008/03/18/les-frameworks-php/
Posted on avril 8th, 2008 at 21:39
Pascal Says:
Bravo pour ces tutos sympas
J'en profite pour signaler l'existence d'un site en français consacré à ce framework : http://www.kohanaphp.ch
Posted on avril 12th, 2008 at 20:38
hotandspicy Says:
En effet je connais ce site. Pour l'instant il se focalise plus sur la traduction de la doc en français et offre un forum en français. C'est une très bonne initiative.
Cependant pour ceux qui ont quelque compétences en anglais, je conseille de rester (pour le moment?) sur le forum officiel qui est beaucoup plus vivant.
Posted on avril 12th, 2008 at 21:09
Maxou Says:
Un grand bravo pour tous ces petits tutoriaux, rien de mieux pour apprendre ! Il sont vraiment bien expliqués et pas trop long, juste de quoi comprendre le concept et partir sur de bonnes bases ! Je travaille sur symfony mais je me met à Kohana pour pouvoir réaliser de petites applications et j'avoue qu'il me séduit déjà !
Merci encore !
Posted on janvier 22nd, 2010 at 12:47