Uncaught ReferenceError: miniShop2 is not defined

Подключаю на кристально чистом сайте
<div id="content" class="product">
                [[$msProduct.content]]
           </div>
<script>
miniShop2.Callbacks.add('Cart.add.ajax.always', 'ajax_log', function(xhr) {
    console.log(xhr);
});

</script>
В консоли выходит ошибка — Uncaught ReferenceError: miniShop2 is not defined

Ссылка s6636.h5.modhost.pro/manager/
Логин s6636
Пароль f7KOYX8fsUzN

s6636.h5.modhost.pro/manager/index.php?a=resource/update&id=7
Антон
18 сентября 2016, 07:59
modx.pro
5 932
0

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

Антон
18 сентября 2016, 19:00
0
Всем огромное спасибо за помощь.
    Іван Клімчук
    19 сентября 2016, 11:05
    +2
    Вы, конечно, можете обижаться, но ждать, что все бросят все свои заботы и побегут вам помогать в выходной день, как то наивно, мне кажется.

    Да и описали бы что хотели сделать (задачу), а то ошибка и все. Я тоже какой-то код могу вставить и говорить, у меня ничего не работает, помогите.

    Мои предположения, что код minishop подключается ниже, чем ваш вызываемый код. Плагины подключают скрипты в конце страницы, а в вашем случае ваш вызов скорее всего в начале, следовательно на момент загрузки вашего скрипта на странице еще нет объекта minishop2, потому и ошибка.
      Антон
      20 сентября 2016, 06:14
      0
      Спасибо за попытку помочь.

      Этот скрипт я подключал даже непосредственно перед закрывающим /body
      Та же самая ошибка.
      При этом minishop работает, товары добавляются.

      Я его правильно понимаю? Его нужно писать просто в таком виде?
        Іван Клімчук
        20 сентября 2016, 08:15
        +1
        Так опишите задачу, что сделать хотите то? Может это совсем по другому сделать можно.
          Антон
          20 сентября 2016, 08:45
          0
          Задача была, но забыл уже.
          Сейчас просто колбэк хочу запустить, посмотреть как работает.

          Как можно подключить ниже чем минишоповский скрипт? Если он в самом низу подключается?

          Вот здесь, например, msearch2 колбэк запускается, хотя и выше основного скрипта.

          $(document).on('mse2_load', function(e, response) {
          
          	var page = mse2Config.page;
          	var limit = Number(mse2Config.limit || mse2Config.start_limit);
          	var pages = Math.ceil(Number(response.data['total']) / limit);
          	
          	console.log(page, pages, limit);
          });
          </script>
          <script type="text/javascript" src="/assets/components/minishop2/js/web/default.js?v=96cf372a34"></script>
          <script type="text/javascript" src="/assets/components/msearch2/js/web/default.js"></script>
          
          <script type="text/javascript">
          if ($("#mse2_mfilter").length) {
          	if (window.location.hash != "" && mSearch2.Hash.oldbrowser()) {
          		var uri = window.location.hash.replace("#", "?");
          		window.location.href = document.location.pathname + uri;
          	}
          	else {
          		mSearch2.initialize("body");
          	}
          }
          </script>
          </body>
          </html>
            Іван Клімчук
            20 сентября 2016, 09:38
            +1
            В случае с msearch все логично, потому что jquery навешивает обработчик на событие, а когда msearch это событие тригерит, запускается обработчик. А в случае с явным вызовом minishop объекта такое уже не получится. Стоит скорее всего последний minishop версии 2.4, почитал документацию, но видимо что-то там не дописано. Буду на неделе разбираться, найду ответ — напишу.
              Антон
              20 сентября 2016, 09:58
              0
              Заранее благодарю.
                Дмитрий Зарубин
                15 ноября 2016, 02:02
                0
                Всё как говорит Иван. Объект минишопа в вашем случае недоступен потому, что скрипт минишопа подставляется перед закрытием боди перед тем, как передать шаблон на сторону клиента. Поэтому есть 2 варианта:
                1. Поставить ваш скрипт после закрытия боди и перед закрытием хтмл.
                2. Подключать скрипт минишопа вручную перед вашим скриптом. Только тут нужно будет убрать его путь в настройках симтемы.
                  Дмитрий Зарубин
                  15 ноября 2016, 02:04
                  0
                  Отбой. Второй вариант не прокатит. Только что проверил.
                    Василий Наумкин
                    15 ноября 2016, 07:08
                    1
                    0
                    Как в первый раз, серьёзно
                    $(document).ready(function() {
                    	console.log(miniShop2);
                    });

                    Или даже
                    [[*id:input=`<script>console.log(miniShop2);</script>`:jsToBottom]]
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      10