Recently, I had to make use of templates in PHP, and as a lot of people on StackOverflow ([1], [2]) suggested, “you don’t need another templating engine like Smarty on top of PHP, as PHP itself is a templating engine”.
So, I ended up making a simple function which looks like this:
function getTemplate($file, $variables = NULL){
if (! is_null($variables))
extract($variables);
include(TEMPLATES_FOLDER . $file);
}
TEMPLATES_FOLDER
is a PHP constant which is defined in the config.php file like this:
if ( !defined('ABSPATH') )
define('ABSPATH', dirname(__FILE__) . '/');
define("TEMPLATES_FOLDER", ABSPATH . "templates/");
So, for example, a template may look like this:
<!-- Navigation START -->
<div class="navigation">
<div class="welcome">Hi, <?=$user;?></div>
<div class="nav">
<ul>
<li><a href="home.php"
class="<? echo (isset($currentHome) ? 'current' : '') ?>">Home</a></li>
<li><a href="members.php"
class="<? echo (isset($currentMembers) ? 'current' : '') ?>">Members</a></li>
</ul>
</div>
<div class="clear"></div>
</div>
<!--
Here you can see the usage of ternary if operator:
echo (isset($currentHome) ? 'current' : '')
And a way to call this template from a home.php file would be:
<? getTemplate("navigation.php", array("user" => getUser(), "currentHome" => true) ); ?>
So the getTemplate()
function loads the navigation.php file and passes it its variables “user
” and “currentHome
” which are then in the getTemplate()
function extracted by using the extract() function and echoed out. The currentHome
variable is set when called from the home.php file so that a template “knows” to set the “current” class to that element.
Templating engines have their pros and cons, and since I didn’t need much leverage on the templating, this proved to serve me just fine.
What do you use for your template management in PHP?
Link to this article on CodeProject