Open Power Template

From Wikipedia, the free encyclopedia
Jump to navigation Jump to search
Open Power Template (OPT)
Developer(s)Invenzzia Group
Stable release
2.0.6 / September 3, 2010; 8 years ago (2010-09-03)
Preview release
2.1-beta1 / September 3, 2010; 8 years ago (2010-09-03)
Written inPHP
TypeTemplate Engine

Open Power Template is a web template engine written in PHP 5. A common strategy in designing web application is separation of the application logic (i.e. data processing) from the presentation (displaying the data). OPT is a tool for implementing such separation; the presentation layer is represented by templates, text files with HTML code and extra instructions controlling the data substitution.

OPT uses a dedicated XML template language for writing templates, it is not a general-purpose, but a domain-specific language. It was primarily designed to support and simplify template-specific problems with a set of declarative instructions. Instead of implementing the rendering algorithms and statements, like in imperative programming, the template designer specifies the expected result and features; this aims to ease the costs and efforts associated with the software development and further maintenance.

The library provides an object-oriented API based on the solutions from popular frameworks; as it is the first member of a bigger project, Open Power Libs, it is built upon a small OPL core library which provides the basic features.


The project started in November 2004, as a template engine for a discussion board project inspired by Smarty. While it later failed, the library became independent. In July 2006, the version 1.0.0 was released. It offered a template language with Smarty-like syntax and a small set of declarative instructions.

In January 2007, the developers release the version 1.1.0 which brings some notable improvements, such as pagination support and tree rendering.

In January 2008, the developers form an open-source programming team, Invenzzia to develop OPT and other PHP projects. At the same time, the development of Open Power Template 2.0 began.

The last version of the 1.1 branch was released in May 2008 and the group focused on the OPT 2.0 development. The new library went into the beta-stage in December and the first stable version was released in July 2009.


The OPT 2.0 template language is an XML application and allows to manipulate the XHTML document structure. The other features are:

  1. Template inheritance and other advanced template modularization mechanisms.
  2. Form rendering support (components)
  3. Abstract, declarative list generators (sections)
  4. Automated filtering against cross-site scripting attacks.
  5. Internationalization support.
  6. XML manipulation instructions.
  7. Imperative control structures: conditions and loops.
  8. Expression language optimized for XML and an abstraction layer making it independent from PHP data types and application-specific implementation details (data formats).

The built-in XML parser can be reconfigured to parse certain HTML documents or plain text content.

Sample application[edit]

Since the templates are separated from the application logic, you need at least two files; the first one contains the presentation code as an XML template:

<?xml version="1.0" ?>
<opt:root escaping="yes">
  <opt:prolog version="1.0" />
  <opt:dtd template="xhtml10transitional" />
      <meta http-equiv="content-type" content="text/html; charset=utf-8" />

      <!-- display a list -->
      <opt:show name="list">
        <li opt:section="list">{$list.item}</li>

The second one generates the data and configures the library:


$tpl = new Opt_Class;
$tpl->sourceDir = './templates/';
$tpl->compileDir = './templates_c/';

$view = new Opt_View('template.tpl');

// Assigning the script data to the template
$view->pageTitle = 'Sample OPT page';
$view->introduction = 'Sample text';
$view->list = array(0 =>
  array('item' => 'Item 1'),
  array('item' => 'Item 1'),
  array('item' => 'Item 1')
$view->setFormat('list', 'Array');

$output = new Opt_Output_Http;

Links and references[edit]