Коллеги, помогите разрешить задачу с выпадающей мини-корзинкой.
        Всем привет, уважаемые коллеги. Прошу Вас помочь решить небольшую задачу. Бьюсь над ней уже трое суток. Так как я не особо шарю в javascript, не получается решить задачу с отображением товаров во всплывающей мини-корзине на мобильной версии сайта. именно на мобильной. Получается следующая штука:
1. Есть чанк с наименованием [[HeaderDesktop]], как понятно из названия — это код шапки для десктопной версии сайта и в нем есть строки:
Код чанка [[miniCart]]:
Прошу Вас, дорогие друзья, помогите мне разобраться! Если нужно, предоставлю доступ.
И еще, вот скрипт, который занимается ajax-запросом:
    
    
                                                                                
            1. Есть чанк с наименованием [[HeaderDesktop]], как понятно из названия — это код шапки для десктопной версии сайта и в нем есть строки:
<div class="col-auto minicart-holder">
         [[!msMiniCart?&tpl=`miniCart`]]
</div>Чанк [[miniCart]] содержит код мини-корзины обновляемой по ajax-запросу, причем в дестопной версии все работает (ниже приложу ссылку на сайт для проверки)Код чанка [[miniCart]]:
<div  class="minicart minicart-js {$total_count > 0 ? ' full' : ''}" id="msMiniCart">
  <div class="empty">
    <a href="javascript:void(0);" class="minicart-link">
      <i class="icon icon-handbag"></i> 
      <span class="minicart-qty ms2_total_count">{$total_count}</span>
      <span class="minicart-title">корзина покупок</span>
      <span class="minicart-total">{'ms2_minicart_is_empty' | lexicon}</span>
    </a>
  </div>
  <div class="not_empty">
    <a href="#" class="minicart-link">
      <i class="icon icon-handbag"></i> 
      <span class="minicart-qty ms2_total_count">{$total_count}</span> 
      <span class="minicart-title">корзина покупок</span> 
      <span class="minicart-total"><span class="ms2_total_cost">{$total_cost}</span> ₽</span>
    </a>
    <div class="minicart-drop">
      <div class="container">
        <div class="minicart-drop-close">ЗАКРЫТЬ</div>
        <div class="minicart-drop-content">
          <h3>Недавно добавленные товары:</h3>
          <span class="ajax-data"></span>
          <div class="minicart-drop-total">
            <div class="float-right">
              <span class="minicart-drop-summa"><span>Сумма заказа:</span> <b><span class="ms2_total_cost">{$total_cost}</span> ₽</b></span>
              <div class="minicart-drop-btns-wrap">
                <a href="#" onclick="location.href='[[~1232]]';" class="btn" title="[[#1232.longtitle]]">
                  <i class="icon-check-box"></i>
                  <span>оформить заказ</span>
                </a> 
                <a href="#" onclick="location.href='[[~1231]]';" class="btn btn--alt" title="[[#1231.longtitle]]">
                  <i class="icon-handbag"></i>
                  <span>Перейти к корзине</span>
                </a>
              </div>
            </div>
            <div class="float-left">
              <a href="#" onclick="location.href='[[~1231]]';" class="btn btn--alt" title="[[#1231.longtitle]]">
                <i class="icon-handbag"></i>
                <span>Перейти к корзине</span>
              </a>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>       
</div>2. Для мобильной версии сайта есть чанк [[HeaderMobile]], который содержит следующий код:<div class="hdr-mobile show-mobile">
  <div class="hdr-content">
    <div class="container">
      <div class="menu-toggle"><a href="#" class="mobilemenu-toggle"><i class="icon icon-menu"></i></a></div>
      <div class="logo-holder"><a href="index.html" class="logo"><img src="/assets/template/Goodwin/images/logo.png" srcset="/assets/template/Goodwin/images/logo-retina.png 2x" alt=""></a></div>
      <div class="hdr-mobile-right">
        <div class="hdr-topline-right links-holder"></div>
        <div class="minicart-holder"></div>
      </div>
    </div>
  </div>
</div>Обратите внимание на блок <div class="minicart-holder"></div>, вот в него просто подтягивается содержимое из чанка для десктопной версии. И получается, что при нажатии на корзинку в мобильной версии выезжает боковое меню, но там нет товаров, а если кликнуть в свободном месте этого меню, то они появляются. Задача заключается в том, чтобы сделать так, чтобы при клике на корзинку в мобильной версии, выезжало это боковое меню сразу с развернутыми, добавленными товарами, а не пустым. Это ж не логично.Прошу Вас, дорогие друзья, помогите мне разобраться! Если нужно, предоставлю доступ.
И еще, вот скрипт, который занимается ajax-запросом:
<script>
  $(document).on('click', '#msMiniCart', function(e) {
	e.preventDefault();
	$.ajax({  
	  type: "POST",  
	  url: '[[~1234]]', 
	  data: {parent: '[[*id]]'},
	  success:  function(data) { 
		if (data){
		  $('span.ajax-data').html(data);
		}else{
		  miniShop2.Message.error('Что-то пошло не так, попробуйте позже!');
		}
	  } 
	}); 
  });
</script>Ссылка на сайт: fourgyo.ru. либо сразу в какой-нибудь каталог fourgyo.ru/zhenshhinam/    Комментарии: 6
                Вообще странноватая логика вашей корзины.
Вам бы просто установить компонент и вызвать что нужно. Там и +- вроде работают.
                    Вам бы просто установить компонент и вызвать что нужно. Там и +- вроде работают.
                Должен сказать, что в FireFox вообще не работает.            
                    Задача заключается в том, чтобы сделать так, чтобы при клике на корзинку в мобильной версии, выезжало это боковое меню сразу с развернутыми, добавленными товарами, а не пустым. Это ж не логично.но зачем вы тогда используете подгрузку содержимого корзины по клику?
Я вижу несколько вариантов решения.
1) на странице не должно быть отдельно блоков для мобильного и отдельно для десктопа. [[HeaderDesktop]], [[HeaderMobile]] это плохая практика. Внешний вид должен адаптироваться под разные устройства за счет каскадных стилей и медиа запросов, а не за счет скрытия блоков для десктопа и отображения блоков для мобильных. В таком случае и корзина у вас всегда будет существовать на странице, потому что шапка остается всегда одной и той же.
2) Я вижу что у вас используется скорее всего какой то готовый шаблон интернет магазина, взятый с бескрайних просторов интернета, а значит переверстывать никто не будет. Тогда действительно придется иметь два разных чанка для шапки, в каждом полноценно вызывать [[!msMiniCart?&tpl=`miniCart`]], а не подгружать по клику, НО решать какой из чанков показать вам нужно еще на уровне обработки запроса на сервере. Помоему для modx даже была какой-то сниппет типа MobileDetect или как то так, который позволяет определить с какого устройства пришел запрос.
                Тут во-первых лучше обновить jQuery, так как она старая стоит. По поводу корзины, можно в одном месте вызвать корзину, в другое вставлять. Накидал примерную суть:
                    $(window).resize(function(){
    if ($('#msMiniCart').length > 0) {
        if($(window).width() < 992){
            $('.hdr-mobile .minicart-holder').append($('#msMiniCart'));
        }
        else {
            $('.col-auto.minicart-holder').append($('#msMiniCart'));
        }
    }
});
$(document).ready(function(){
	if ($('#msMiniCart').length > 0) {
		if($(window).width() < 992){
			$('.hdr-mobile .minicart-holder').append($('#msMiniCart'));
		}
		else {
			$('.col-auto.minicart-holder').append($('#msMiniCart'));
		}
	}
});Но лучше сделать как сказал Александр Мельник.            
                Уважаемые коллеги, да Вы правы, шаблон взят с themeforest.net. И по сути логику его работы переписывать бы не хотелось. Мне тоже не понятен этот подход из двух блоков, но да и черт с ним. И подгрузка товаров в мобильной версии по клику в области этой корзины — не моя прихоть, это как раз та загвоздка с которой я борюсь. Я даже пытался просто сделать невидимый блок, обрамляющий иконку корзины и навесить на него событие, но почему-то она как-будто ниже всех слоев оказывается и вытащить ее выше у меня не получается, хотя если вывесить событие на соседний элемент, например на иконку аккаунта, то все работает. Вот в этом то и затык. А шаблон — дык выбирает заказчик… его дивизию…            
                    
                Всем привет. решил задачу иначе:
У блока с мини-корзиной есть класс ".full". Навесил на него то же событие (отправка запроса на выборку товаров по ajax). Если кому-то интересно, то ниже приложил код:
                    У блока с мини-корзиной есть класс ".full". Навесил на него то же событие (отправка запроса на выборку товаров по ajax). Если кому-то интересно, то ниже приложил код:
<script>
  (function(){
    //Сохраняем ссылку на стандартный метод jQuery
    var originalAddClassMethod = jQuery.fn.addClass;
    //Переопределяем
    $.fn.addClass = function(){
        var result = originalAddClassMethod.apply(this, arguments);
        //Инициализируем событие смены класса
        $(this).trigger('cssClassChanged');
        return result;
    }
})();
$(function(){
    $(".full").bind('cssClassChanged', function(){ 
        e.preventDefault();
	$.ajax({  
	  type: "POST",  
	  url: '[[~1234]]', 
	  data: {parent: '[[*id]]'},
	  success:  function(data) { 
		if (data){
		  $('span.ajax-data').html(data);
		}else{
		  miniShop2.Message.error('Что-то пошло не так, попробуйте позже!');
		}
	  } 
	}); 
    });
});
</script>
Всем спасибо!            
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.