phive/twig-extensions-deferred

This package is abandoned and no longer maintained. The author suggests using the rybakit/twig-deferred-extension package instead.

An extension for Twig that allows to defer block rendering

Maintainers

👁 rybakit

Package info

github.com/rybakit/twig-extensions-deferred-legacy

Homepage

pkg:composer/phive/twig-extensions-deferred

Fund package maintenance!

rybakit

Statistics

Installs: 1 428 434

Dependents: 3

Suggesters: 0

Stars: 3

Open Issues: 0

v2.0.3 2020-06-03 12:45 UTC

Requires

Requires (Dev)

Suggests

None

Provides

None

Conflicts

None

Replaces

None

MIT 2d8514ef779e1e33724befed86be62cc3c23c405

  • Eugene Leonovich <gen.work.woop@gmail.com>

twigextensiondeferlazy

This package is auto-updated.

Last update: 2022-12-16 20:34:47 UTC


README

👁 Build Status
👁 Scrutinizer Code Quality
👁 Mentioned in Awesome Twig

An extension for Twig 2 that allows to defer block rendering.

If you are looking for support for Twig 3+, check out this repository.

Installation

The recommended way to install the extension is through Composer:

composer require phive/twig-extensions-deferred

Initialization

use Phive\Twig\Extensions\Deferred\DeferredExtension;
use Twig\Environment;

...

$twig = new Environment($loader);
$twig->addExtension(new DeferredExtension());

Simple example

{% 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:

use Twig\Environment;

...

$twig = new Environment($loader);
$twig->addGlobal('assets', new ArrayObject());

Then build the following set of templates:

{# layout.html.twig #}
<!DOCTYPE html>
<html>
 <head>
 ...
 </head>
 <body>
 {% block content '' %}

 {{ assets.append('/js/layout-header.js') }}

 {% block javascripts deferred %}
 {% for asset in assets %}
 <script src="{{ asset }}"></script>
 {% endfor %}
 {% endblock %}

 {{ assets.append('/js/layout-footer.js') }}
 </body>
</html>


{# 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:

<!DOCTYPE html>
<html>
 <head>
 ...
 </head>
 <body>
 <script src="/js/layout-header.js"></script>
 <script src="/js/page-header.js"></script>
 <script src="/js/subpage2.js"></script>
 <script src="/js/page-footer.js"></script>
 <script src="/js/layout-footer.js"></script>
 </body>
</html>

Block overriding

{# 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

Deferred Twig Extension is released under the MIT License. See the bundled LICENSE file for details.