Introducing the masterpage
Most websites have the same layout and an area with dynamic content. So most people choose for the following solution: generate a couple of template files for the static content and then write the code for the dynamic content and include the static templates. Here is how the code for a contact and an aboutme page would look like
contact.php
<?php
include('header.php');
include('leftpanel.php');
// code for contact page
include('rightpanel.php');
include('footer.php');
?>
aboutme.php
<?php
include('header.php');
include('leftpanel.php');
//something about me
include('rightpanel.php');
include('footer.php');
?>
This code is pretty flexible. But what happens if you want to change your layout to something without a rightpanel? Right, you have to edit each page and remove the include call. A couple of weeks ago i discovered the concept of tiles and immediately realised this is useful for php too. Here is an example implementation
contact.php
<?php
require_once('init.php');
$tiles = array();
$tiles['main'] = PAGE_CONTENT . '/contact.html';
include('masterpage.php');
?>
aboutme.php
<?php
require_once('init.php');
$tiles = array();
$tiles['main'] = PAGE_CONTENT . '/aboutme.html';
include('masterpage.php');
?>
masterpage.php
<?php
if (!isset($tiles)) $tiles = array();
if (!isset($tiles['header']) $tiles['headers'] = PAGE_CONTENT . '/default-header.html';
if (!isset($tiles['leftpanel']) $tiles['headers'] = PAGE_CONTENT . '/default-leftpanel.html';
if (!isset($tiles['main']) $tiles['headers'] = PAGE_CONTENT . '/default-main.html';
if (!isset($tiles['footer']) $tiles['headers'] = PAGE_CONTENT . '/default-footer.html';
include($tiles['header']);
include($tiles['leftpanel']);
include($tiles['main']);
include($tiles['footer.php']);
?>
As you can see, this allows the programmer to change the layout in a single file, the masterpage. If a programmer wants to change the content of a specific area of a page all he has to do is change the $tiles array.