Output Class [PHP5]

Namecheap AuctionsNamecheap Auctions
Namecheap AuctionsNamecheap Auctions
SpaceshipSpaceship
Watch

Dave

Top Member
Impact
5,776
PHP:
<?php
/*********************************************************************************
 * Very basic class that handles sending output to the browser including necessary 
 * templates and headers. Useful for separating business logic from presentation
 * logic.
 *********************************************************************************
 * @author David Parr <[email protected]>
 * @copyright David Parr 2008
 * @license [url]http://opensource.org/licenses/gpl-license.php[/url] GNU Public License
 * @version 0.1
 */
 
class Output 
{
    // @var String The path to the templates
    private $path      = "";
    
    // @var String The extension of the file
    private $extension = "";
    
    // @var Array Additional headers.
    private $headers   = array();
    
    // @var Array Templates to be outputted i.e. header, footer etc.
    private $templates = array();
    
    // @var Array Variables. Variables for each template.
    private $vars      = array();
    
    /**
     * Constructor sets path and extension for template files.
     */
    public function __construct($path, $extension = ".php")
    {
        // Path must be a directory.
        if(is_dir($path) && is_readable($path))
        {
            $this->extension = $extension;
            $this->path = $path;
        }
        else
        {
            throw new Exception("Invalid path \"".$path."\" specified");
        }
    }
    
    /**
     * Set an additional header.
     */
    public function setHeader($header)
    {
        $this->headers[] = $header;
    }
    
    /**
     * Set another template. Make sure it exists within the template directory.
     */
    public function setTemplate($template)
    {
        $templatePath = $this->path.$template.$this->extension;
        if(is_readable($templatePath))
        {
            $this->templates[] = $template;
        }
        else
        {
            throw new Exception("Invalid template \"".$template.$this->extension."\" specified");
        }
    }
    
    /**
     * Sets a new associative array of variables for use in templates.
     */
    public function setVars($vars)
    {
        $this->vars = array_merge($this->vars, $vars);
    }
    
    /**
     * Process headers and templates.
     */
    public function process()
    {
        // First of all send headers before processing output.
        foreach($this->headers as $h)
        {
            header($h);
        }
        
        // Extract the vars. This is so we don't have to use $this in the templates but direct variable names
        extract($this->vars, EXTR_PREFIX_SAME, "wddx");
        
        foreach($this->templates as $t)
        {
            include($this->path.$t.$this->extension);
        }
    }
}
?>

There is an example below.

PHP:
<?php

// You can use an autoload functions but for now I will just include the output class
include("class/output.php");

// Absolute path to the templates directory. Make sure include trailing slash friend like I do below.
$path = "/path/to/templates/goes/here/";

// INITIALISE!!! Use your own extension if you want (like .tpl.php or .template.php)
$output = new Output($path);

// ... GET MY DATA FROM DB HERE OR SOMETHING ...

// .. AND THEN MAGIC.... THE VARS FOR YOUR TEMPLATES
$vars = array(
    "title" => "This is example of Output!", 
    "test" => "test"
);

// We can set as many headers/templates/vars we want!
// BUT REMEMBER THIS. TEMPLATES ARE OUTPUTTED IN THE ORDER YOU INDEX THEM!

$output->setVars($vars);

$output->setTemplate("example");

$output->process();
?>

Our example template looks like this.

PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title><?php echo $title ?></title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
    <h1><?php echo $test ?></h1>
</body>
</html>
 
0
•••
The views expressed on this page by users and staff are their own, not those of NamePros.
GoDaddyGoDaddy
Appraise.net

We're social

Escrow.com
Spaceship
Rexus Domain
CryptoExchange.com
Domain Recover
CatchDoms
DomDB
NameFit
  • The sidebar remains visible by scrolling at a speed relative to the page’s height.
Back