Shopify API - управление зависимостями ScriptTag?

У меня есть приложение Shopify, которое добавляет ScriptTag через API сразу после установки. Скрипт зависит от jQuery и библиотеки Shopify jQuery AJAX. Я бы хотел, чтобы продавцы не заставляли продавцов редактировать несколько файлов тем, если это возможно.

Насколько я могу судить:

  • Эти зависимости не гарантируются для каждой темы или в правильном порядке.
  • У меня нет прямого способа ссылаться на Shopify CDN или сценарии темы из API (поскольку это только для удаленных сценариев).
  • Объединение всех тегов скрипта в scripts.liquid актив не работает, поскольку добавленные API * .liquid ресурсы имеют доступ только к объекту настроек.

Я неохотно склоняюсь к тому, чтобы предоставить фрагмент кода отдельно и инструкции для продавцов, чтобы вставить его перед </head>.

Есть ли шаблон, предназначенный для Shopify для использования ScriptTag, который мне не хватает?


person kaizau    schedule 24.08.2012    source источник


Ответы (2)


Вы не можете полностью зависеть от того, что доступно в теме, владелец магазина может настраивать все, что хочет, и у вас очень мало контроля над этим. Возможны следующие варианты:

  1. Требуйте от клиентов наличия или добавления jQuery в свою тему.
  2. Напишите свой код на чистом javascript без каких-либо других библиотечных зависимостей.
  3. Вставьте нужную библиотеку в свой собственный скрипт. Обязательно заверните его в закрытие, чтобы, если у них уже есть библиотека, они не конфликтуют.

Я бы порекомендовал сделать №3 сам, но я бы, вероятно, выбрал более легкую библиотеку, которая делает минимум, который вам нужен (то есть, если вам действительно не нужен обходной механизм выбора jQuerys, это огромный кусок кода, без которого вы можете обойтись). Если поискать, их много.

person John Duff    schedule 24.08.2012
comment
Спасибо за участие. Есть ли более гибкий ScriptTag в вашей дорожной карте API? Если у владельца магазина установлено несколько приложений, все лишние / повторяющиеся библиотеки действительно могут замедлить загрузку. - person kaizau; 24.08.2012
comment
Мне кажется, что текущие теги скриптов достаточно гибкие, чтобы справиться с этим. Я дал вам несколько простых решений, вы также можете сначала проверить, присутствует ли ваша библиотека по выбору, и если не загружать ее динамически. На мой взгляд, это того не стоит, поскольку вам также нужно убедиться, что это версия, которую вы ожидаете, и т. д., поскольку темы полностью настраиваются, вы собираетесь столкнуться со всеми возможными библиотеками. - person John Duff; 25.08.2012
comment
Я создал этот образец файла для использования с тегом ScriptTag: gist.github.com/carolineschnapp/5397337 Он показывает, как загрузить jQuery, если jQuery не определен или слишком старый для ваших нужд, без нарушения темы. Вам нужно использовать jQuery.noConflict. Это может быть сделано. - person Caroline Schnapp; 17.04.2013

Я пошел дальше и создал этот образец файла в качестве отправной точки для использования с ScriptTag: http://gist.github.com/carolineschnapp/5397337 Он покажет вам, как загрузить jQuery, если jQuery не определен или слишком старый для ваших нужд, без нарушения темы магазина. Вам нужно использовать jQuery.noConflict. Это легко сделать без побочного ущерба.

Я также написал следующее, ужасное чтение, вероятно, худшее из написанных за всю мою карьеру документации, но оно полно мудрости: http://docs.shopify.com/api/tutorials/using-javascript-responsible Я надеюсь, что это убедит вас продолжать использовать ScripTag.

Что касается загрузки библиотеки Shopify jQuery AJAX, я бы совершенно не стал. Я бы использовал свой собственный код с jQuery, чтобы делать все, что мне нужно. Ненавижу это говорить, но использовать собственный код слишком просто, это действительно так. Вам вообще не нужен вспомогательный файл, это ненужное раздувание, и, используя его, вы можете столкнуться с возможными конфликтными ситуациями, потому что тема также может его использовать. Если тема использует его для упрощения корзины или загрузки продуктов с помощью Ajax, она переопределяет некоторые функции обратного вызова, определенные во вспомогательном файле. Вы нарушите все эти обратные вызовы, просто снова загрузив файл. Люди будут добавлять товары в корзину, и внезапно на их странице появится предупреждение, или вместо продукта, загруженного на страницу через Ajax, тема внезапно покажет предупреждение: «Теперь у нас есть вся информация. вы запросили о продукте X ", но продукт не добавлен на страницу. Ни из одного приложения, использующего jquery.api.js, никогда не получалось ничего хорошего.

person Caroline Schnapp    schedule 16.04.2013