I have to add few lines on js functions but mixin not working.
app/design/frontend/Konect/base/Magento_ProductVideo/requirejs-config.js
var config = { config: { mixins: { 'Magento_ProductVideo/js/load-player': { 'Magento_ProductVideo/js/load-player-mixin': true }, 'Magento_ProductVideo/js/fotorama-add-video-events': { 'Magento_ProductVideo/js/fotorama-add-video-events-mixin': true } } } };
app/design/frontend/Konect/base/Magento_ProductVideo/web/js/load-player-mixin.js
define([ 'jquery', 'jquery/ui' ], function ($) { 'use strict'; $.widget('mage.videoVimeo', $.mage.productVideoLoader, { /** * Initialize the Vimeo widget * @private */ _create: function () { var timestamp, additionalParams = '', src; this._initialize(); timestamp = new Date().getTime(); this._autoplay = true; if (this._autoplay) { additionalParams += '&autoplay=1&muted=1'; // Edited this line added '&muted=1' console.log('loaded muted...'); } if (this._loop) { additionalParams += '&loop=1'; } src='//player.vimeo.com/video/' + this._code + '?api=1&player_id=vimeo' + this._code + timestamp + additionalParams; this.element.append( $('<iframe/>') .attr('frameborder', 0) .attr('id', 'vimeo' + this._code + timestamp) .attr('width', this._width) .attr('height', this._height) .attr('src', src) .attr('webkitallowfullscreen', '') .attr('mozallowfullscreen', '') .attr('allowfullscreen', '') ); this._player = window.$f(this.element.children(':first')[0]); // return an error: Uncaught TypeError: window.$f is not a function // Froogaloop throws error without a registered ready event this._player.addEvent('ready', function (id) { // return an error: Cannot read property 'addEvent' of undefined $('#' + id).closest('.fotorama__stage__frame').addClass('fotorama__product-video--loaded'); }); }, }); return $.mage.videoVimeo; });
On this file I want to add more parameter:
To this line: additionalParams += '&autoplay=1&muted=1'; // Edited this line added '&muted=1'
After static deploy I got an error on this two lines:
this._player = window.$f(this.element.children(':first')[0]); // return an error: Uncaught TypeError: window.$f is not a function
this._player.addEvent('ready', function (id) { // return an error: Cannot read property 'addEvent' of undefined
app/design/frontend/Konect/base/Magento_ProductVideo/web/js/fotorama-add-video-events-mixin.js
define([ 'jquery', 'jquery/ui', 'catalogGallery', 'Magento_ProductVideo/js/load-player' ], function ($) { 'use strict'; return function(target){ //create AddFotoramaVideoEvents widget $.widget('mage.AddFotoramaVideoEvents', target, { PV: 'product-video', /** * Creates widget * @private */ _create: function () { $(this.element).on('gallery:loaded', $.proxy(function () { this.fotoramaItem = $(this.element).find('.fotorama-item'); this._initialize(); }, this)); }, /** * * @private */ _initialize: function () { this._loadVideoData(); if (this._checkForVideoExist()) { this._checkFullscreen(); this._listenForFullscreen(); this._checkForVimeo(); this._isVideoBase(); this._initFotoramaVideo(); this._attachFotoramaEvents(); } }, /** * Attach * * @private */ _attachFotoramaEvents: function () { this.fotoramaItem.on('fotorama:showend', $.proxy(function (e, fotorama) { this._startPrepareForPlayer(e, fotorama); $('.' + this.PV).productVideoLoader(); // Added this line to load video when video icon is clicked }, this)); this.fotoramaItem.on('fotorama:show', $.proxy(function (e, fotorama) { this._unloadVideoPlayer(fotorama.activeFrame.$stageFrame.parent(), fotorama, true); }, this)); this.fotoramaItem.on('fotorama:fullscreenexit', $.proxy(function (e, fotorama) { fotorama.activeFrame.$stageFrame.find('.' + this.PV).remove(); this._startPrepareForPlayer(e, fotorama); }, this)); } }); return $.mage.AddFotoramaVideoEvents; } });
Just going to update this method:
_attachFotoramaEvents: function () {
And add this line
$('.' + this.PV).productVideoLoader(); // Added this line to load video when video icon is clicked.
I'm not sure what is missing or anything I have missed. Hope anyone can suggest what the best.