MageStache is a module designed to support partial Mustache template integration with Magento. Traditional phtml and Mustache templates can live side-by-side and render each other without any customization required.
{{! The pragma below is required }}
{{%MAGENTO-TEMPLATE}}
<!doctype html>
<html>
<head>
{{> head}} {{! This one is phtml }}
</head>
<body>
{{> after_body_start}}
{{> header}}
{{> breadcrumbs}}
<div class="content">
{{> global_messages}}
{{> content}} {{! More phtml. Maybe it contains Mustache, though? }}
</div>
{{> footer_before}}
{{> footer}}
{{> global_cookie_notice}}
{{> before_body_end}}
</body>
</html>
composer require mattwellss/magestache
It's techincally possible to install this module without Composer, but it's unsupported, so no examples are provided.
Of importance to any user looking to add Mustache templates to an existing app is the ability to continue using Magento as before in other cases. This module supports that by treating Mustache's {{> partial}}
syntax as (essentially) getChildHtml
.
Potentially the primary difference between Magento's standard phtml template rendering and Mustache template rendering is the lazy and eager loading of data (respectively). As much as possible, Magento prevents unnecessary processing by waiting as long as possible to load collections and render blocks. On the other hand, Mustache expects data to be available upon render. MageStache gets around this issue with the use of two fundamental concepts.
This is a child block of the Mustache template (another Magento block itself). When applied to a template, this block is used as the data source for rendering. In this way, a non-Mustache Magento block–a cart, product, or widget–can provide data to the Mustache template.
Magento's transformation functionality enabled by copyFieldset
is quite powerful but little-used outside of core. By specifying a conversion (generally via layout XML), data preparation normally done "in the moment" in phtml can be handled ahead of time for Mustache. For example, the product collection and toolbar of a product listing block can be prepared and added to the data hash for a Mustache product listing template.
To keep track of features currently in-progress, please check the issues. To propose a new feature or request a bug fix, please open a new issue.
Please include thorough steps to reproduce the bug. Before creating a pull request to fix a bug, please open an issue.
As with bug fixes, opening an issue is preferred.
TODO!