README.md
# Tower
[![Build Status](https://travis-ci.org/swaroopsm/tower.svg?branch=master)](https://travis-ci.org/swaroopsm/tower)
[![Code Climate](https://codeclimate.com/github/swaroopsm/tower.png)](https://codeclimate.com/github/swaroopsm/tower)
[![Latest Stable Version](https://poser.pugx.org/swaroopsm/tower/v/stable.svg)](https://packagist.org/packages/swaroopsm/tower)
[![Total Downloads](https://poser.pugx.org/swaroopsm/tower/downloads.svg)](https://packagist.org/packages/swaroopsm/tower)
[![Latest Unstable Version](https://poser.pugx.org/swaroopsm/tower/v/unstable.svg)](https://packagist.org/packages/swaroopsm/tower)
[![License](https://poser.pugx.org/swaroopsm/tower/license.svg)](https://packagist.org/packages/swaroopsm/tower)
A light weight helper for simple php templating.
### Why use Tower?
If you want to keep your view logic separated from the core code, Tower is for you. Tower is obviously not a full-fledged template engine. Although if you are using a PHP framework like Codeigniter, Laravel etc., Tower is again a bad solution.
Tower is best suited if for small scale web applications, where you may not need a full-fledged framework. If you decide to write a web application using plain PHP, then do check Tower.
### Installing Tower
Tower is available via composer. Add the following line to your `composer.json` so that Tower is autoloaded into your application.
~~~
"require": {
"swaroopsm/tower": "0.3"
}
~~~
### Using Tower
Tower has a very simple and easy API consisting of a few methods.
#### Instantiate Tower
~~~
$tower = new Tower();
~~~
#### Set a template file
Tell Tower which file should be used as the template.
```html
// filename: template.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<h2><?= $name ?></h2>
<p><?= $description ?></p>
</body>
</html>
```
~~~
$tower->setTemplate('template.php');
~~~
#### Set variables
Tower lets you setup variables that can be used in your template.
~~~
$tower->set('name', 'Tower');
$tower->set('description', 'A simple template helper');
~~~
#### Render your template
Render on your browser.
~~~
$tower->render();
~~~
#### Template Layouting
Tower also lets you add a layout for your templates. This can be useful if for your webpages.
Example on using layout in your templates;
~~~
$tower->setLayout('layout.php');
~~~
You use the `$yield` to render the template contents in your helper. A more detailed example on using layout is availabe at: [Layout Example](https://github.com/swaroopsm/tower/wiki/Layout-Example)
#### Using Partials
Partials allows you to include templates in other templates thus allowing you to re-use the templates. Refer to the following code in order to set partials for your templates.
~~~
$tower->partial->set('header', 'header.php');
$tower->partial->set('footer', 'footer.php');
~~~
And to render these partials in your templates use:
~~~
<?= $partial['header'] ?>
Some stuffs here...
<?= $partial['footer'] ?>
~~~
If you decide to use a different variable for the partial instead of `$partial` use the following:
~~~
$tower->partial->setPrefix('towerPartial');
~~~
Now you can do the following:
~~~
<?= $towerPartial['header'] ?>
Some stuffs here...
<?= $towerPartial['footer'] ?>
~~~
Refer here for a [Detailed Example](https://github.com/swaroopsm/tower/wiki/Including-Partials)
### Some Goodies
Few other extra methods included in Tower.
#### Save to file
This is useful if you would like to dynamically save contents to a file.
~~~
$tower->save('filename.txt');
~~~
#### Examples
- [Render Template](https://github.com/swaroopsm/tower/wiki/Render-Template)
- [Layout Example](https://github.com/swaroopsm/tower/wiki/Layout-Example)
- [Partials Example](https://github.com/swaroopsm/tower/wiki/Including-Partials)