I am trying to add in some 3rd party jQuery code to my Magento2 module. I want to have my own custom js file that will use the 3rd party code. Before I was adding the code into the header instead of using Magneto2's requireJS structure. I am not sure of the proper way to add in the files. The third party js file= slick.js
and my custom js file= configurator.js
.
I was under the impression that you are supposed to add a script type="text/x-magento-init
" in the template in which you add your custom js file in (I am note sure what to put here). Followed by adding a shim and path config for the 3rd part js in the require-config.js.
My file structure:
some of my code:
my custom js file:
require(['jquery','slick'], function($){
$(function(){
$('.main-gallery').slick();
});
});
my requirejs-config.js
var config = {
map: {
"*": {
slick: 'Briteskies_ProductConfigurator/js/slick-1.5.7/slick'
}
},
paths: {
"slick": 'js/slick-1.5.7/slick'
},
"shim": {
"slick" : ["jquery"]
}
};
Any input would be great, thanks!
Best Answer
1. Create Your Component
Assuming the path to your component is Briteskies_ProductConfigurator/js/configurator.js, use the contents below. Notice the return function gets a
config
andelement
parameter.The
config
parameter will contain options that you define when initializing the component from your template.The
element
parameter will be a reference to the DOM object you target when initializing the component from your template:2. Map Your Component (Make it available to requirejs)
In your module's requirejs-config.js file, define a configurator component and point to its path. I've omitted your other code to see only the changes to be added:
3. Initialize Component From Your Template
In the template that will hold the content needing the slick slider, you can target an element and specify which component to use.
The DOM object(s) that the
".main-gallery"
key below matches gets passed as theelement
parameter mentioned in Step 1.The json object defined after the
"configurator"
key below gets passed as theconfig
parameter mentioned in Step 1.Bonus: If you are using your own Block for the template, you could fetch system configuration values and make them available to your component (say for toggling autoplay speed, whether to use arrows, slides to show, etc...):