Ante Programmer Guide

Ante is a very simple to use template engine. Please read The Ante User Guide to prepare for this page.

Installing Ante

First requirement is having PHP 5.

To install Ante, get the latest version of the Ante tarball (link in the blue menu at the top left) and store it in a subfolder of your work directory (inside your web folders).

		tar xzf Ante-Aug22.tgz
then you can include it in your PHP code.

Make sure that in any directory that you have a template, you create a directory antecache that is writable by your web server.

You can test that it works on your system by pointing your browser at ..../tests/testthem.php after creating the antecache directory ..../tests/antecache/ and making sure it's writable by your web server. That should show a green bar saying that 25 of 25 tests have passed and how long it took. If it reports something else. Please email me with a bug report. BTW, reloading the page should seriously reduce the time reported since the .php files created from the templates are already created.

I use PHP 5.2.0 as my development environment if you're interested in just getting it working. I've also tested from time to time in a PHP 5.0 environment.

PHP Programmer Interface

The simplest way to use Ante from PHP is

		require_once ANTEPATH.'';
		Ante::render('m2.html', $datasource);
where $datasource is an AwDataSource object, and ANTEPATH is the folder where Ante is installed.

AwDataSource Interface

An AwDataSource is an interface with one method in it. function get($awname); This method finds the objects that are set into the template. The object returned must be an AwObject class (see next section). It may also be a AwDataSource, in which case, depending on the template it may be treated as an inner namespace to the current one. If the name does not exist in this datasource, the datasource may return null (to allow for chaining to the outer namespace) or false (do not look in outer namespace/datasource).

To support the implicit loops, the get method will be called with the integers, starting with the number 1 and increasing until the AwDataSource returns false.

AwObject Interface

AwObject is an interface with has three methods.

function getText(); returns the text that will be placed inside tags as the text of the element (or the value attribute in a input type="text" element)

function getInputName(); is a method that returns a string that is placed in the name attribute of an input, textarea or select

function getType(); returns an AwInputType object that has such things as the value that is placed in the type attribute of an input where the input type is not already set to one of checkbox, file, radio, submit, button, file, image, or hidden.

AwInputType Interface

The AwInputType object is an "advanced" section that I've implemented but haven't properly tested. More below.


AbstractAwObject is an abstract class to help the implementation of AwObjects. Of the above, it implements getInputName() (return the field awname) and getType() which always returns an AwSimpleInputType object.


SimpleAwObject is a class that inherits from AbstractAwObject and implements the getText() method. It's constructor sets the awname field so that getInputName() in AbstractAwObject has something to return.


AwArrayDataSource is a useful class for treating an array as a datasource. It implements AwDataSource by treating each key in the array (or integer index) as an awname and returning a SimpleAwObject. (It also extends SimpleAwObject so that namespaces can also be objects).

Here's a sample of how to use it.

		$datasource = new AwArrayDataSource( array(
			'name'=>'John Smith',
			'address' => '17 Avondale Crescent',
			'city' => 'Kingston',
			'province' => 'Ontario',
			'children' => array(3, 'Bob', 'Margret', 'Jill')));

The following names would be valid in the template:

and inside the children namespace 1, 2, and 3 would be available.

If the template writer wrote <span class="aw_children">4</span>, the 4 would be replaced with the first element in the 'children' array (3). (This is why AwArrayDataSource extends SimpleAwObject.)

If you don't care about namespaces, you can use this class for things like:

			require_once '../../adodb5/';
			require_once '../';
			$adb = ADONewConnection($connectionstring);
			$menunum = 1;
			if (isset($_REQUEST['menunum']))  $menunum = $_REQUEST['menunum'];
			$sql = 'select * from menutitles where menunum = ?';
			$res = $adb->Execute($sql, array($menunum));
			$datasource = new AwArrayDataSource($res->fields );
			Ante::render('db.html', $datasource);
(I'm using the Adodb package to interface to my database.) Assuming that db.html is a template that uses the column names of the table menutitles, we've done all the programming necessary to display the menu titles. Ante looks after filling in the data correctly.

Now that you've finished all the interesting interface to Ante, please look through the Cookbook which shows how to create data for the templates in the User Guide.

Advanced bits

The AwInputType methods

function getInputType() must return a string that Ante can place into the type attribute of input

getDisabled(), getReadonly(), getAccept(), getMaxLength(), getMax(), getMin(), getStep(), getPattern(), and getRequired are the remaining methods on AwInputType. They are mainly of use to add attributes to input methods. The attributes are in the current HTML5 spec. They can be used to constrain what the browser will return to the server (when browsers start supporting HTML5)

The disabled attribute is supposed to disallow the use of the input. The required attribute is supposed to tell the browser that the field must be filled in for the form to be submitted.

The max, min, and step attributes are for numeric inputs.

The maxLength attribute puts a limit on the length of the string returned in the input, while the pattern attribute is supposed to be a regular expression describing what may be submitted in the form.

The accept attribute is actually in the HTML4 spec, to specify what file types are accepted, but neither Firefox nor IE yet support it properly.

At present, none of these attributes are supported (except by Opera). They are included presently to support HTML5 when it comes out, and so that bits of Javascript could be written to support them. That would be extremely useful for client side input form checking.