Magento Twig
schumacherfm/magento-twig
Enables the use of Twig template engine for Magento 2, allowing developers to write templates using the `.twig` file extension. It dispatches events for modifying Twig's loader and environment.
Build Tests
Code Quality
Tested on Magento 2.4.8-p3
Recent Test History
Each release is tested against the latest Magento version at that time.
Share This Module's Status
README
Loaded from GitHubMagento 2 Twig Template Engine
Twig template engine for Magento2.
This template engine is meant to be used additionally to the .phtml files and does not
provide any .twig template file.
A use case would be if you write your first Magento2 module you can require this package and write all your template files in Twig.
Installation
- Add dependency
composer require schumacherfm/magento-twig
- Enable the module
bin/magento module:enable SchumacherFM_Twig
- Update the database entries
bin/magento setup:upgrade
Events & Configuration
The Twig template engine class dispatches two events so that you can modify Twig.
Event twig_loader with event object loader. You can set loader any other class which implements
Twig_LoaderInterface. http://twig.sensiolabs.org/doc/api.html#loaders
Event twig_init with event object twig. You can add here more functions, filters, tags, etc.
http://twig.sensiolabs.org/doc/advanced.html
Configuration options can be found Stores -> Settings -> Configuration -> Advanced -> Developer -> Twig.
Frontend Integration
Your template files must have the file extension .twig to get automatically recognized.
In your layout xml files or blocks please specify the new template
<referenceBlock name="top.links">
<block class="Magento\Theme\Block\Html\Header" template="html/header.twig" name="header" as="header" before="-">
<arguments>
<argument name="show_part" xsi:type="string">welcome</argument>
</arguments>
</block>
</referenceBlock>
Example header.phtml converted to header.twig
<?php switch ($this->getShowPart()):
case 'welcome': ?>
<li class="greet welcome"><?php echo $this->getWelcome() ?></li>
<?php break; ?>
<?php case 'other': ?>
<?php echo $this->getChildHtml(); ?>
<?php break; ?>
<?php endswitch; ?>
{% if getShowPart() == 'welcome' %}
<li class="greet welcome">{{ getWelcome() }}</li>
{% endif %}
{% if getShowPart() == 'other' %}
{{ getChildHtml()|raw }}
{% endif %}
Example breadcrumbs.phtml converted to breadcrumbs.twig
<?php if ($crumbs && is_array($crumbs)) : ?>
<div class="breadcrumbs">
<ul class="items">
<?php foreach ($crumbs as $crumbName => $crumbInfo) : ?>
<li class="item <?php echo $crumbName ?>">
<?php if ($crumbInfo['link']) : ?>
<a href="<?php echo $crumbInfo['link'] ?>" title="<?php echo $this->escapeHtml($crumbInfo['title']) ?>">
<?php echo $this->escapeHtml($crumbInfo['label']) ?>
</a>
<?php elseif ($crumbInfo['last']) : ?>
<strong><?php echo $this->escapeHtml($crumbInfo['label']) ?></strong>
<?php else: ?>
<?php echo $this->escapeHtml($crumbInfo['label']) ?>
<?php endif; ?>
</li>
<?php endforeach; ?>
</ul>
</div>
<?php endif; ?>
{% if crumbs %}
<div class="breadcrumbs">
<ul class="items">
{% for crumbName,crumbInfo in crumbs %}
<li class="item {{ crumbName }}">
{% if crumbInfo.link %}
<a href="{{ crumbInfo.link }}" title="{{ crumbInfo.title }}">
{{ crumbInfo.label }}
</a>
{% elseif crumbInfo.last %}
<strong>{{ crumbInfo.label }}</strong>
{% else %}
{{ crumbInfo.label }}
{% endif %}
</li>
{% endfor %}
</ul>
</div>
{% endif %}
Access helper methods
Write in your .twig file:
{{ helper("Magento\\Core\\Helper\\Url").getHomeUrl() }}
Tests
@todo
Support / Contribution
Report a bug using the issue tracker or send us a pull request.
Instead of forking I can add you as a Collaborator IF you really intend to develop on this module. Just ask :-)
I am using that model: A successful Git branching model
For versioning have a look at Semantic Versioning 2.0.0
History
2.0.0
- Added Magento 2.4.0 compatibility
- Removed helper functions from
app/functions.phpsince the file is no longer available in Magento 2.4 - Removed deprecated function
layoutBlockfrom twig environment - Updated to twig to 3.0.*
Compatibility
- Magento >= 2
- php >= 5.4.0
License
OSL-30
Author
This content is fetched directly from the module's GitHub repository. We are not the authors of this content and take no responsibility for its accuracy, completeness, or any consequences arising from its use.