https://github.com/rybakit/twig-deferred-extension
An extension for Twig that allows to defer block rendering.
https://github.com/rybakit/twig-deferred-extension
deferred php twig twig-extension
Last synced: 3 months ago
JSON representation
An extension for Twig that allows to defer block rendering.
- Host: GitHub
- URL: https://github.com/rybakit/twig-deferred-extension
- Owner: rybakit
- License: mit
- Created: 2014-05-08T08:48:09.000Z (about 12 years ago)
- Default Branch: master
- Last Pushed: 2024-04-04T09:41:41.000Z (about 2 years ago)
- Last Synced: 2025-03-28T04:36:01.314Z (about 1 year ago)
- Topics: deferred, php, twig, twig-extension
- Language: PHP
- Homepage:
- Size: 67.4 KB
- Stars: 108
- Watchers: 9
- Forks: 3
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
- awesome-twig - Defer Block Rendering - An extension for Twig that allows to defer block rendering (Twig / Extensions)
- awesome-twig - Defer Block Rendering - An extension for Twig that allows to defer block rendering (Twig / Extensions)
README
Twig Deferred Extension
=======================
[](https://github.com/rybakit/twig-deferred-extension/actions?query=workflow%3AQA)
[](https://scrutinizer-ci.com/g/rybakit/twig-deferred-extension/?branch=master)
[](https://github.com/JulienRAVIA/awesome-twig#extensions)
An extension for [Twig](https://twig.symfony.com/) that allows to defer block rendering.
## Installation
```bash
composer require rybakit/twig-deferred-extension
```
> *Note that this extension requires Twig 3 or above. If you need support for older versions of Twig,
> please refer to the [legacy repository](https://github.com/rybakit/twig-extensions-deferred-legacy).*
## Initialization
```php
use Twig\DeferredExtension\DeferredExtension;
use Twig\Environment;
...
$twig = new Environment($loader);
$twig->addExtension(new DeferredExtension());
```
## Simple example
```jinja
{% block foo deferred %}
{{ bar }}
{% endblock %}
{% set bar = 'bar' %}
```
The `foo` block will output "bar".
## Advanced example
Just for example purposes, first create a [global twig variable](http://twig.sensiolabs.org/doc/advanced.html#globals):
```php
use Twig\Environment;
...
$twig = new Environment($loader);
$twig->addGlobal('assets', new \ArrayObject());
```
Then build the following set of templates:
```jinja
{# layout.html.twig #}
...
{% block content '' %}
{{ assets.append('/js/layout-header.js') }}
{% block javascripts deferred %}
{% for asset in assets %}
{% endfor %}
{% endblock %}
{{ assets.append('/js/layout-footer.js') }}
{# page.html.twig #}
{% extends "layout.html.twig" %}
{% block content %}
{{ assets.append('/js/page-header.js') }}
{% if foo is defined %}
{{ include("subpage1.html.twig") }}
{% else %}
{{ include("subpage2.html.twig") }}
{% endif %}
{{ assets.append('/js/page-footer.js') }}
{% endblock %}
{# subpage1.html.twig #}
{{ assets.append('/js/subpage1.js') }}
{# subpage2.html.twig #}
{{ assets.append('/js/subpage2.js') }}
```
The resulting html will be the following:
```html
...
```
## Block overriding
```jinja
{# index.twig #}
{% extends "base.twig" %}
{% block foo %}foo is not deferred anymore{% endblock %}
{% block bar deferred %}bar is deferred now{% endblock %}
{# base.twig #}
{% block foo deferred %}foo is deferred{% endblock %}
{% block bar %}bar is not deferred{% endblock %}
```
## License
The library is released under the MIT License. See the bundled [LICENSE](LICENSE) file for details.