Skip to content

Rendering templates

Fetching or rendering templates directly

As explained in basics, you can use $smarty->fetch() or $smarty->display() to render a template directly.

<?php

use Smarty\Smarty;
$smarty = new Smarty();

$smarty->display('homepage.tpl');

// or

$output = $smarty->fetch('homepage.tpl');

When you use display(), Smarty renders the template to the standard output stream. fetch() returns the output instead of echoing it.

The example above uses simple filenames to load the template. Smarty also supports loading templates from resources.

Creating a template object

You can also create a template object which later can be prepared first, and rendered later. This can be useful, for example if you plan to re-use several templates.

<?php
use Smarty\Smarty;
$smarty = new Smarty;

// create template object with its private variable scope
$tpl = $smarty->createTemplate('index.tpl');

// assign a variable (available only to this template)
$tpl->assign('title', 'My Homepage!');

// display the template
$tpl->display();

More on assigning variables in using data in templates.

Testing if a template exists

You can use templateExists() to check whether a template exists before you attempt to use it.

It accepts either a path to the template on the filesystem or a resource string specifying the template.

This example uses $_GET['page'] to {include} a content template. If the template does not exist then an error page is displayed instead. First, the page_container.tpl

<html>
    <head>
        <title>{$title|escape}</title>
    </head>
    <body>
        {* include middle content page *}
        {include file=$content_template}
    </body>
</html>

And the php script:

<?php

// set the filename eg index.inc.tpl
$mid_template = $_GET['page'].'.inc.tpl';

if (!$smarty->templateExists($mid_template)){
    $mid_template = 'page_not_found.tpl';
}
$smarty->assign('content_template', $mid_template);

$smarty->display('page_container.tpl');