|
PHPRunner uses built-in template language. PHPRunner templates
cleanly separates your presentation layer (HTML, CSS, etc.) from
your application code.
New template language was introduced in PHPRunner 5.0. The main
idea is to simply visual templates moving all logic and javascript
to PHP files. This makes Visual Editor stable and eliminates the
need to reset pages.
PHPRunner 4.2 and older use Smarty as a template language. If
you open a project created by previous version, all unmodified
visual templates will be converted to new format automatically.
Modified files won't be changed and still be using Smarty-based
template language. To convert modified visual template to the new
format use "Reset" and re-apply changes manually.
Template
language reference
- all templates tags are enclosed within delimiters { and }. All
content outside delimiters is displayed as static HTML.
- template variables start with dollar ($) sign. They may
contain numbers, letters and underscores.
Example: {$variable_name}
{BEGIN block_name} {END
block_name} is used to define block section (loops,
condition statements).
Functions
|
·
|
assign($name,
$val) is used to assign value $val to the variable
$name. |
|
·
|
assignbyref($name,
&$val) is similar to assign() except for value $val is
passed by reference. Use assignbyref() when $val variable is array.
See {block body} example below. |
|
·
|
assign_section($name,
$begin, $end) is used to define block section. |
|
·
|
assign_loopsection($name,
&$data) is used to define loop section. |
|
·
|
display($template) renders and
displays the template file. |
How templates
work
Template files (*.htm) can be found in templates directory under output directory.
Here is the basic example of how templates work:
|
list.php
|
|
include('libs/xtempl.php');
// create object
$xt = new Xtempl();
// assign some content. This would typically come from
// a database or other source, but we'll use static
// values for the purpose of this example.
$xt->assign('name', 'george smith');
$xt->assign('address', '45th & Harris');
// display it
$xt->display('list.htm');
|
The template file then contains the output interspersed with
tags that PHPRunner replaces with assigned content.
|
list.htm
|
|
output
|
|
<html>
<head>
<title>User Info</title>
</head>
<body>
User Information:<p>
Name: {$name}<br>
Address: {$address}<br>
</body>
</html>
|
|
<html>
<head>
<title>User Info</title>
</head>
<body>
User Information:<p>
Name: george smith<br>
Address: 45th & Harris<br>
</body>
</html>
|
{BEGIN} ... {END} blocks
Template file contains a set of code sections wrapped by {BEGIN
...} and {END ...}.
|
view.htm
|
|
{BEGIN Model_fieldblock}
<tr><td class=shade width=150>Model</td><td width=250>
{$Model_value}
</td></tr>
{END Model_fieldblock}
|
In view.php file use the following:
$xt->assign("Model_fieldblock",true); - code snippet between {BEGIN ...} and {END ...} appears in the output.
$xt->assign("Model_fieldblock",true);
- code snippet goes away.
How to deal
with Javascript
Earlier we mentioned that javascript and some HTML tags like
<form> and <input type=hidden ...> need to be moved to
PHP code in order to keep templates clean.
On the server side javascript code needs to be assigned to
body or end variables in block array.
|
list.php
|
|
// create an array
$body = array();
// code assigned to "begin" variable replaces {BEGIN body} tag
$body["begin"]='<form name="frmSearch" method="GET" action="carsadmin_cars_list.php">
<input type="Hidden" name="a" value="search">
<input type="Hidden" name="value" value="1">
</form>';
// code assigned to "end" variable replaces {END body} tag
$body["end"]="<script>if(document.getElementById('SearchFor'))
document.getElementById('ctlSearchFor').focus();</script>";
// using assignbyref() function as body is an array
$xt->assignbyref("body",$body);
|
Template file and generated output
|
list.htm
|
|
output
|
|
{BEGIN body}
...
{END body}
|
|
<form name="frmSearch" method="GET" action="carsadmin_cars_list.php">
<input type="Hidden" name="a" value="search">
<input type="Hidden" name="value" value="1">
</form>
...
<script>
if(document.getElementById('SearchFor'))
document.getElementById('ctlSearchFor').focus();
</script>
|
|