Templates
Nette uses the Latte template system. Latte is used because it is the most secure template system for PHP, and at the same time the most intuitive system. You don't have to learn much new, you just need to know PHP and a few Latte tags.
It is usual that the page is completed from the layout template + the action template. This is what a layout template might
look like, notice the blocks {block}
and tag {include}
:
<!DOCTYPE html>
<html>
<head>
<title>{block title}My App{/block}</title>
</head>
<body>
<header>...</header>
{include content}
<footer>...</footer>
</body>
</html>
And this might be the action template:
{block title}Homepage{/block}
{block content}
<h1>Homepage</h1>
...
{/block}
It defines block content
, which is inserted in place of {include content}
in the layout, and also
re-defines block title
, which overwrites {block title}
in the layout. Try to imagine the result.
Search for Templates
The path to the templates is deduced according to simple logic. It tries to see if one of these template files exists relative
to the directory where presenter class is located, where <Presenter>
is the name of the current presenter and
<view>
is the name of the current action:
templates/<Presenter>/<view>.latte
templates/<Presenter>.<view>.latte
If it does not find the template, the response is error 404.
You can also change the view using $this->setView('otherView')
. Or, instead of searching, directly specify the
name of the template file using $this->template->setFile('/path/to/template.latte')
.
You can change the paths where templates are searched by overriding the formatTemplateFiles method, which returns an array of possible file paths.
The layout is expected in the following files:
templates/<Presenter>/@<layout>.latte
templates/<Presenter>.@<layout>.latte
templates/@<layout>.latte
layout common to multiple presenters
<Presenter>
is the name of the current presenter and <layout>
is the name of the layout,
which is by default 'layout'
. The name can be changed with $this->setLayout('otherLayout')
, so that
@otherLayout.latte
files will be tried.
You can also directly specify the file name of the layout template using
$this->setLayout('/path/to/template.latte')
. Using $this->setLayout(false)
will disable the layout
searching.
You can change the paths where templates are searched by overriding the formatLayoutTemplateFiles method, which returns an array of possible file paths.
Variables in the Template
We pass variables to the template by writing them to $this->template
. For example, we will create a variable
$article
as follows:
$this->template->article = $this->articles->getById($id);
Using $this->template->getLatte()
you can access the Latte\Engine
object and set
filters etc.
Default Variables
Presenters and components pass several useful variables to templates automatically:
$basePath
is an absolute URL path to root dir (for example/CD-collection
)$baseUrl
is an absolute URL to root dir (for examplehttp://localhost/CD-collection
)$user
is an object representing the user$presenter
is the current presenter$control
is the current component or presenter$flashes
list of messages sent by methodflashMessage()
Creating Links
In template we create links to other presenters & actions as follows:
<a n:href="Product:show">detail</a>
Attribute n:href
is very handy for HTML tags <a>
. If we want to print the link elsewhere, for
example in the text, we use {link}
:
URL is: {link Homepage:default}
For more information, see Creating Links.