Pour le moment, j'ai un fichier de modèle HTML de base. Lorsque je veux créer une nouvelle page, je copie le modèle et place des instructions require_once
entre des balises spécifiques. Je me demandais s'il y avait une meilleure façon de rendre inutile la copie du modèle à chaque fois. Voici un exemple typique:Comment pourrais-je améliorer ce système de template?
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="css/second.css" />
<script language="JavaScript" type="text/javascript"
src="js/validation_functions.js"></script>
<title>Order a Ticket for the ball</title>
</head>
<body>
<div id="banner">St. Tom's Ambulance Ball</div>
<!-- START[container] -->
<!-- "body" -->
<div id="container">
<!-- START[header] -->
<div id="header">
<!-- header -->
<div id="header_text">introduction</div>
<div id="header_cell2">the process</div>
<div id="header_cell3">start</div>
</div>
<!-- END[header -->
<!-- START[content] -->
<!-- "other container" -->
<div id="content">
<!-- START[form] -->
<div id="form">
<?php
require_once(realpath($config["directories"]["views"]."/index.form.view.php"));
?>
</div>
<!-- END[form] -->
<!-- START[data] -->
<!-- "main content" -->
<div id="data">
<?php
require_once(realpath($config["directories"]["views"]."/index.data.view.php"));
?>
</div>
<!-- END[data] -->
<!-- START[side] -->
<div id="side">
<?php
require_once(realpath($config["directories"]["views"]."/index.side.view.php"));
?>
</div>
<!-- END[side] -->
</div>
<!-- END[content] -->
<!-- START[footer] -->
<div id="footer">
<!-- footer -->
<div id="footer_text">
<ul>
<li><a href="index.php">home</a></li>
<li><a href="">partners</a></li>
<li><a href="">projects</a></li>
<li><a href="">contact us</a></li>
</ul>
</div>
<div id="footer_cell2"> </div>
<div id="footer_cell3"> </div>
</div>
<!-- END[footer] -->
</div>
<!-- END[container] -->
</body>
</html>
EDIT: Je ai pris note de vos suggestions pour utiliser GET. La nouvelle idée est d'avoir chaque url de demande formée comme index.php? Page = nom_page. Cette requête serait alors traitée par un contrôleur principal qui définit ensuite les variables du modèle en fonction de la valeur de $ _GET ['page']. Pour cela, le modèle sera maintenant:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="css/second.css" />
<script language="JavaScript" type="text/javascript"
src="js/validation_functions.js"></script>
<title><?php h($title) ?></title>
</head>
<body>
<div id="banner">St. Tom's Ambulance Ball</div>
<!-- START[container] -->
<!-- "body" -->
<div id="container">
<!-- START[header] -->
<div id="header">
<!-- header -->
<div id="header_text"><?php h($header_1) ?></div>
<div id="header_cell2"><?php h($header_2) ?></div>
<div id="header_cell3"><?php h($header_3) ?></div>
</div>
<!-- END[header -->
<!-- START[content] -->
<!-- "other container" -->
<div id="content">
<!-- START[form] -->
<div id="form">
<?php
require_once(realpath($view_1));
?>
</div>
<!-- END[form] -->
<!-- START[data] -->
<!-- "main content" -->
<div id="data">
<?php
require_once(realpath($view_2));
?>
</div>
<!-- END[data] -->
<!-- START[side] -->
<div id="side">
<?php
require_once(realpath($view_3));
?>
</div>
<!-- END[side] -->
</div>
<!-- END[content] -->
<!-- START[footer] -->
<div id="footer">
<!-- footer -->
<div id="footer_text">
<ul>
<li><a href="index.php">home</a></li>
<li><a href="">partners</a></li>
<li><a href="">projects</a></li>
<li><a href="">contact us</a></li>
</ul>
</div>
<div id="footer_cell2"> </div>
<div id="footer_cell3"> </div>
</div>
<!-- END[footer] -->
</div>
<!-- END[container] -->
</body>
</html>
Note: h() est une fonction qui supprime d'abord tous les tags d'entités indésirables avant l'écho d'une chaîne. Sur une note connexe, en haut de chaque page, j'ai des fichiers de contrôleur qui sont inclus avec require_once. Je me demandais s'il serait possible de mettre en œuvre une fonction qui inclut simplement les fichiers basés sur une chaîne d'entrée spécifique (nom de la fonctionnalité/page)-à-dire « index » de cette façon:
function include_controller($page){
switch($page){
case "index":
require_once(realpath($config["directories"]["controllers"]."/index_.php"));
break;
case "checkout":
require_once(realpath($config["directories"]["controllers"]."/checkout_.php"));
break;
default:
break;
}
}
Utilisez le Zend, ou un autre framework grand public? – PurplePilot
Avez-vous regardé quelque chose comme: http://www.smarty.net/? – Rimian