Впихнуть в mFilter2 JS

Сразу прошу прошение за тупость данного вопроса, но может найдутся те кто не будет меня бить палками а помогут подсказкой))))
Мне нужно запустить js-скрипт в момент выполнения фильтрации, сам js-скрипт поместил в чанк и вызываю его так [[$tpl.catalog_scr]]
Не мудрствуя лукаво, приковырял кастылик для теста вот так:
[[!mFilter2?
                    		&element=`msProducts`
                    		&paginator=`pdoPage`
                    		&includeThumbs=`180x270`
                    		&parents=`[[*id]]`
                    		&toPlaceholders=`my.`
                    		&depth=`2`
                    		&sortby=`model_number`
                    		&sortdir=`ASC`
                    		&showHidden=`1`
                    		&tpl=`tpl.catalogItems`
                    		&suggestions=`0`
                    		&limit=`18`
                    		&showEmptyFilters=`1`
                    		&pageLimit=`20`
                    		&tplPage=`@INLINE <a href="[[+href]]"><li>[[+pageNo]]</li></a>[[$tpl.catalog_scr]]`
                    		&tplPageFirst=`@INLINE <a href="[[+href]]"><li class="control">Первая</li></a>`
                    		&tplPageLast=`@INLINE <a href="[[+href]]"><li class="control">Последняя</li></a>`
                    		&tplPageWrapper=`@INLINE <div id="mse2_pagination"><ul class="pagination">[[+first]][[+pages]][[+last]]</ul></div>`
                    		&tplPageActive=`@INLINE <li class="active"><span>[[+pageNo]]</span></li>`
                    		&tplPageWrapper=`@INLINE <ul class="pagination">[[+first]][[+pages]][[+last]]</ul>`
                    		&filters=`
                        		msoption|gamma,
                    		    ms|item_type,
                    		    ms|rcode,
                    		    ms|price6:number`
	&tplFilter.outer.ms|price6=`tpl.mFilter2.filter.slider`
	&tplFilter.row.ms|price6=`tpl.mFilter2.filter.number`
                    	]]
а именно строка:
&tplPage=`@INLINE <a href="[[+href]]"><li>[[+pageNo]]</li></a>[[$tpl.catalog_scr]]`
Скрипт из чанка выполняется и «отлично работает», но хочу понять как мне вывести его здесь нормально и по человечески, пробовал так:
&tpls=`tpl.catalogItems, tpl.catalog_scr`
но скрипт в чанке несработал(((( прошу Вашей помощи.

P.S. Поместить скрипт в tpl.catalogItems не вариант, условие вызова скрипта 1 раз на странице, при помещении его в вышеуказанный чанк, скрипт вызывается столько раз, сколько отработал tpl.catalogItems.
unixk0d
17 мая 2017, 09:20
modx.pro
2 024
0

Комментарии: 6

Виталий Серый
17 мая 2017, 14:20
0
Вот это не подходит?
    unixk0d
    17 мая 2017, 16:20
    0
    В /assets/components/msearch2/js/web/default.js в самое начало вставлял код:
    $(function() {
    	initSlideShow();
    	initAdd();
    
    	$(".checkbox").mouseover(function() {
    		$(this).addClass("hover");
    	});
    
    	$(".checkbox").mouseout(function() {
    		$(this).removeClass("hover");
    	});
    
        $('.gallery_2 li.active img').elevateZoom({
    		zoomWindowOffety: -30,
    		zoomWindowOffetx: -245,
    		zoomWindowWidth: 290,
    		zoomWindowHeight: 505,
    		borderSize: 2,
    preloading: 0,
    lensOpacity: 0,
    cursor: "crosshair",
    zoomWindowFadeIn: 500,
    zoomWindowFadeOut: 750,
    lensFadeIn: 500,
    lensFadeOut: 500,
    zoomLevel: 2.6,
    scrollZoom : true,
    scrollZoomIncrement: 0
    	});
    
    	$(".preview .scroll_2 .product-list_2.small a").click(function() {
    	    $(".zoomContainer").remove();
    	});
    
    	$('.accordion .item .heading').click(function() {
    		var _this = $(this);
    		if(!_this.parent().hasClass('active')) {
    			_this.parent().find('.expanded').slideDown(500, function(){
    				_this.parent().addClass('active');
    			});
    		} else {
    			_this.parent().find('.expanded').slideUp(500, function(){
    				_this.parent().removeClass('active');
    			});
    		}
    	});
    	var useragent = navigator.userAgent;
    
    
    
    
    function initAdd() {
    	$('.tooltip .close').on('click', function(event) {
    		$(this).parent().parent().removeClass('active');
    		event.preventDefault();
    	});
    }
    
    
    
    function initSlideShow() {
    
    	$('.preview').fadeGallery({
    		slideElements: '.gallery_2 li',
    		pagerLinks: '.product-list_2.small li',
    		pauseOnHover: false,
    		autoRotation: false,
    		btnNext: false,
    		btnPrev: false,
    		duration: 650,
    		event: 'click'
    	});
    
    }
    });
    не помогло, первом заходе в каталог скрипт отрабатывает, но при переключении успешном фильтра, реакция скрипта нулевая, обновление страницы с включенными фильтрами дает результат идеально отработанного скрипта, причём если в самое начала скрипта прописать
    $(document).on('mse2_load', function
    то скрипт не срабатывает.
    Андрей
    17 мая 2017, 17:04
    1
    +2
    В скрипте /assets/components/msearch2/js/web/default.js найтиде метод afterLoad, там в конце можете и вызвать скрипт. Он срабатывает после того как результаты отобразятся.

    Либо более правильный вариант это использовать событие mse2_load

    $(document).on('mse2_load', function(e, data) {
    	//тут ваш скрипт
    });

    Вызывать надо после подключения файла default.js
      unixk0d
      18 мая 2017, 11:51
      0
      Спасибо, мне идеально подошёл вызов после метода afterLoad.
      Николай
      17 мая 2017, 17:08
      +1
      mFilter использует сниппет, допустим pdoResoures. А тот в свою очередь имеет чанк обёртки tplWrapper, который оборачивает результаты фильтрации. Соответственно, любой скрипт прописанный в чанк из tplWrapper, будет срабатывать при каждой фильтрации и при переходе по страницам. Там и можно писать скрипты любые, относящиеся к фильтрам и результатам фильтрации.
        unixk0d
        18 мая 2017, 11:57
        0
        Спасибо, но мне подошёл именно вызов описанный Андреем, задача дать скрипту отработать 1 раз и задать свойства для всех объектов разом а не для каждого по отдельности. Но все равно СПАСИБО!
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          6