Pour ce tuto, nous allons intégrer la version 6.5.3 de Foundation for sites. Le pre-processing des assets se fait avec Webpack et Gulp (contre Grunt dans Magento 2) et les fichiers source sont fournis au format SASS pour les styles et ES5, jQuery (version 3+) pour les javascripts, ce qui les rend inexploitables de base avec Magento 2 (LESS pour les styles et version de jQuery 1.12 pour les javascripts). Nous utiliserons donc les versions déjà compilées (CSS et javascript « vanilla ») qui se trouvent dans le dossier dist du repository Git.
Les styles
Créer un dossier app/design/<Vendor_name>/<theme_name>/web/css/vendor/foundation/
dans lequel nous allons copier/coller l’intégralité des fichiers se trouvant dans le chemin dist/css du Git.
Dans app/design/<Vendor_name>/<theme_name>/web/css/source/_theme.less
:
1 2 3 4 5 6 7 |
/** * Foundation for Sites by ZURB * Version 6.5.3 * foundation.zurb.com * Licensed under MIT Open Source */ @import "../vendor/foundation/foundation.css"; |
A noter: le code CSS final du framework n’étant pas éclaté en différents fichiers, il faudra probablement que vous ré-éditiez ce fichier pour retirer les styles qui entrent en conflit avec ceux de votre thème. Vous pouvez importer foundation.min.css
si vous souhaitez conserver le fichier en l’état.
Les scripts
Joindre l’intégralité des widgets
Solution la plus simple: la version minifiée dans l’intégralité du code JS du framework tient en 171ko.
Créer un dossier app/design/<Vendor_name>/<theme_name>/web/js/vendor/foundation/
dans lequel nous allons copier/coller l’intégralité des fichiers se trouvant dans le chemin dist/js du Git.
Dans app/design/<Vendor_name>/<theme_name>/requirejs-config.js
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
var config = { // Paths defines associations from library name (used to include the library, // for example when using "define") and the library file path. paths: { 'foundation': 'js/vendor/foundation/foundation.min' }, // Shim: when you're loading your dependencies, requirejs loads them all // concurrently. You need to set up a shim to tell requirejs that the library // (e.g. a jQuery plugin) depends on another already being loaded (e.g. depends // on jQuery). // Exports: if the library is not AMD aware, you need to tell requirejs what // to look for so it knows the script has loaded correctly. You can do this with an // "exports" entry in your shim. The value must be a variable defined within // the library. shim: { 'foundation': { deps: ['jquery'], exports: 'Foundation' } } }; |
Dans un fichier *.phtml (ou *.js pour la partie entre <script />
):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<script type="text/javascript"> require([ 'jquery', 'foundation' ], function($, Foundation) { 'use strict'; // console.log(Foundation); var $toggler = new Foundation.Toggler($('#menuBar')); }); </script> <p><a data-toggle="menuBar">Expand!</a></p> <ul class="menu" id="menuBar" data-toggler=".expanded"> <li><a href="#">One</a></li> <li><a href="#">Two</a></li> <li><a href="#">Three</a></li> <li><a href="#">Four</a></li> </ul> |
Problématiques:
Modifier un paramètre du composant et inclure une chaîne de traduction i18n
Avant d’instancier un nouvel objet, on modifier un ou plusieurs paramètres par défaut. La traduction se fait par la méthode PHP de Magento 2 (et pas par la méthode Javascript).
1 2 |
Foundation.Drilldown.defaults.backButton = '<li class="js-drilldown-back"><a tabindex="0"><?php echo __('Back') ?></a></li>'; var $drilldown = new Foundation.Drilldown($('#navigation-mobile-drilldown')); |