Template-Based Web Development With patTemplate (part 2) - Scoping It Down (
Page 2 of 14 )
You've already seen how to use the
AddVar() method to replace template variables with actual values. However,
template variables are "local" to a template, and so, the value assigned to a
template variable cannot be accessed from other templates (actually, that's a
little white lie which I'm going to recant on the next page, but bear with me
for a moment).
In the event that you need a variable which is "global",
and whose value can be accessed from more than one template, patTemplate offers
the addGlobalVar() method call, which makes the value of a template variable
available to all other templates.
Take a look at the following
templates, all of which use the template variable {IMAGES}:
<!-- app1.tmpl -->
<patTemplate:tmpl name="main">
<html>
<head>
<basefont face="Arial">
</head>
<body>
<table border="1" cellspacing="0" cellpadding="0">
<patTemplate:link src="top" />
<patTemplate:link src="middle" />
<patTemplate:link src="bottom" />
</table>
</body>
</html>
</patTemplate:tmpl>
<patTemplate:tmpl name="top">
<tr>
<td colspan="3"><img src="{IMAGES}/top.gif"></td>
</tr>
</patTemplate:tmpl>
<patTemplate:tmpl name="middle">
<tr>
<td valign="top"><img src="{IMAGES}/left.gif"></td>
<td>
<form action="login">
<table border="0" cellspacing="4" cellpadding="0">
<tr>
<td><font size="-1">Username:</font></td>
<td><input type="text" size="6"></td>
</tr>
<tr>
<td><font size="-1">Password:</font></td>
<td><input type="password" size="6"></td>
</tr>
</table>
</form>
</td>
<td valign="top"><img src="{IMAGES}/right.gif"></td>
</tr>
</patTemplate:tmpl>
<patTemplate:tmpl name="bottom">
<tr>
<td colspan="3"><img src="{IMAGES}/bottom.gif"></td>
</tr>
</patTemplate:tmpl>
Now, rather than making three calls to AddVar() - one for
each of the templates referencing the variable {IMAGES} - I can save myself time
with a single call to AddGlobalVar(), which makes the value of {IMAGES}
available in the global namespace. Here's the script:
<?php
// include the class
include("include/patTemplate.php");
// initialize an object of the class
$template = new patTemplate();
// set template location
$template->setBasedir("templates");
// add templates to the template engine
$template->readTemplatesFromFile("app1.tmpl");
// add global variable
$template->AddGlobalVar("IMAGES", "/app1/images");
// parse and display the template
$template->displayParsedTemplate("main");
?>