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('leftpanel.php');
// code for contact page
include('rightpanel.php');
include('footer.php');
?>

<?php
include('leftpanel.php');
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');
?>

<?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.