amteich / kirby-twig

Twig templating support for Kirby CMS
MIT License
48 stars 12 forks source link
kirby-cms kirby3-plugin maintainer-wanted twig-templates

⚠️ This repo moved here and is now maintained by wearejust.

Twig Plugin for Kirby CMS

What it looks like

Before:

<?php /* site/templates/hello.php */ ?>
<h1><?= $page->title() ?></h1>
<ul>
<?php foreach ($page->children() as $child): ?>
  <li><a href="https://github.com/amteich/kirby-twig/blob/master/<?= $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="https://github.com/amteich/kirby-twig/blob/master/{{ 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