4

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:

enter image description here

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!

1

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 and element 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:

define([
    'jquery',
    'slick'
], function ($) {
    return function(config, element) {
        var speed = config.autoplaySpeed;

        // When document is ready
        $(function () {
            $(element).slick({
                slidesToShow: 1,
                slidesToScroll: 1,
                arrows: false,
                dots: false,
                autoplay: true,
                autoplaySpeed: speed
            })
        });
    };
});

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:

var config = {
    map: {
        "*": {
            configurator: 'Briteskies_ProductConfigurator/js/configurator'
        }
    }
};

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 the element parameter mentioned in Step 1.

The json object defined after the "configurator" key below gets passed as the config 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...):

<script type="text/x-magento-init">
{
     ".main-gallery" : {
        "configurator" : {
            "autoplaySpeed": 5000
        }
     }
}
</script>
3

For my custom theme I included Slick too, it does work and my code is not very different than yours. For my theme I did the following:

Placed requirejs-config.js in the root of my theme folder. Requirejs-config.js looks like:

var config = {
    paths: {
        slick: 'js/vendor/jquery/slick.min'
    }
};

Then in my main.js I added:

require(['jquery', 'slick'], function($){
    $(function(){
        // Custom code here
    });
});

Maybe my approach helps you.

  • Thanks for the input. Right now I want to keep the js isolated to the module(I am pretty sure this can be done) since I am not building a custom theme. I will try your advice out for some practice though. – Greg Crane Aug 12 '15 at 16:41
  • Any luck with this @GregCrane? DId you manage to isolate to the module? – Shabith Feb 9 '16 at 2:27

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.