amteich/kirby-twig

Twig templating support for Kirby CMS

Installs: 13 861

Dependents: 0

Suggesters: 0

Security: 0

Stars: 46

Watchers: 5

Forks: 8

Open Issues: 0

Type:kirby-plugin

4.1.7 2022-10-05 08:11 UTC

README

  • Adds support for Twig templates to Kirby CMS (3.0+).
  • PHP templates still work, you don’t have to rewrite them if you don’t want to.

What it looks like

Before:

<?php /* site/templates/hello.php */ ?>
<h1><?= $page->title() ?></h1>
<ul>
<?php foreach ($page->children() as $child): ?>
  <li><a href="<?= $child->url() ?>"><?= $child->title() ?></li>
<?php endforeach; ?>
</ul>

After:

{# site/templates/hello.twig #}
<h1>{{ page.title }}</h1>
<ul>
{% for child in page.children() %}
  <li><a href="{{ child.url }}">{{ child.title }}</li>
{% endfor %}
</ul>

Installation

Download

Download and copy this repository to /site/plugins/kirby-twig.

Git submodule

git submodule add https://github.com/amteich/kirby-twig.git site/plugins/kirby-twig

Composer

composer require amteich/kirby-twig

Usage

Page templates

Now that the plugin is installed and active, you can write Twig templates in the site/templates directory. For example, if the text file for your articles is named post.txt, you could have a post.twig template like this:

{% extends 'layout.twig' %}
{% block content %}
  <article>
    <h1>{{ page.title }}</h1>
    {{ page.text.kirbytext | raw }}
  </article>
{% endblock %}

See the {% extends '@templates/layout.twig' %} and {% block content %} parts? They’re a powerful way to manage having a common page layout for many templates, and only changing the core content (and/or other specific parts). Read our Twig templating guide for more information.

Hint: Accessing pagemethods instead of public variables

Twig calls to specific methods, like for instance page.children sometimes return NULL. This can occur, if there is also a public variable which is only initialized after calling the corresponding method.

{{ page.children }} returns NULL, because the public variable is returned. Please call the method instead like this: {{ page.children() }}.

Options

You can find a full list of options in the options documentation.

More documentation

License

MIT

Credits

  • Maintainer: Christian Zehetner
  • Twig library: Fabien Potencier and contributors / License
  • Twig plugin for Kirby 2: Florens Verschelde