In this post you are going to learn the basics of how to write clean templates with Kirby's PHP template engine.
This is not only a rule for Kirby templates, but for all the HTML code you write – always keep it tidy, consistent and polished. I know it's often difficult with tight budgets or when you just started to learn how to code. But the cleaner you keep your templates right from the beginning, the easier it will be to maintain those later.
It's vital to feel comfortable with the editor and its syntax highlighting. It doesn't matter if it's Microsoft's Code, GitHub's Atom, an IDE like PHPStorm or something like SublimeText. Take what fits you.
I know that PHP looks a bit scary in the beginning, when you come from front-end developer background. But it's far less complicated than you might think. Here are the basics:
Display a variable
If / else
Those are the most basic tools you will need in your templates.
That wasn't too hard, right?
So let's move on with some rules to write beautiful PHP.
Always make sure to use proper indentation. It doesn't really matter if you use spaces or tabs to indent your lines, just make sure it's tidy. Considering PHP blocks as HTML blocks makes it easier to structure templates and makes them look cleaner in the end.
This becomes an unreadable mess when you have more than just one nested condition or loop and lots of html between it. Better use alternative syntax, which will help you to understand where blocks start and end.
This will always end up in unreadable Spaghetti code.
It might be ok to do that inside a function sometimes. But most of the times you really should avoid this.
Since PHP 5.4 the echo "short tag" is permanently enabled, so you can use
<?= instead of
in your templates without having to make any php.ini or .htaccess settings.
There's also a short PHP tag (
<? instead of
<?php), which you can enable in your
php.ini or your
.htaccess file. However, we do not recommend using this short tag to keep your code as compatible and portable as possible.
By using the short
echo tag in conjunction with the standard PHP opening tag (
<?php), your templates become very readable and you can visually distinguish a control structure from an
Kirby has built-in includes for your templates called snippets. In other systems they are often called partials or stubs or something similar. There's an entire page in the docs about them, which you should definitely read.
Snippets can simplify your templates drastically, which will lead to better template readability.
Using snippets makes entire parts of your templates reusable for other templates and reduces the amount of code per template.
Kirby has a lot of built-in helpers to simplify your templates.
Working with absolute URLs in templates is a nightmare. That's why Kirby has the url() function to help you build correct links:
In many situations you don't have to write a full if clause in your templates. There are shorter versions, which you should know about:
A typical problem when writing templates is to switch on HTML attributes on demand.
(ie. for an active class on menu items)
Kirby has a built in
e() function, which works like a compressed if/else clause:
In the example above,
class="home" will only be added to the body tag, when the current page is the home page.
This even works with alternatives, when the condition is not matched:
This will apply the
home selector to the home page and the
other selector whenever the current page is not the home page.
You often have to check for an existing object first, before you can use it. For example when you want to find out if an image exists, before you render an image tag.
We keep our template engine as simple and effective as possible, but we also don't want to lock you in. Our plugin system offers a simple way to embed your own template engine and there are plugins for Twig and other template engines available.