Показать товары по статье - PullRequest
0 голосов
/ 12 февраля 2019

Как я могу показать список продуктов (например, рецепт) на странице статьи.Можете ли вы дать мне несколько советов о том, что я должен использовать для достижения такого поведения?Как я могу динамически связать эти товары со статьей? enter image description here

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Получение продуктов, как только мы узнаем, какие они есть

Существует два способа вывести продукты на произвольную страницу в Shopify:

1) Использование all_products [handle]

Использование дескриптора продукта для получения продукта из глобального объекта all_products.

Пример:

{% assign ingredient = all_products['lavender-oil'] %}

Это хорошо работает для небольшого количества продуктов, но для большого количества продуктов это может привести к задержкам во время загрузки страницы.Мы также ограничены только 20 (я думаю) вызовами all_products на странице, поэтому это не сработает для рецептов с тонной ингредиентов в них.

2) Использование коллекции

Используйте коллекцию, которая содержит только необходимые продукты.Вы можете ссылаться на любую произвольную коллекцию, если знаете ее дескриптор.При создании коллекций вы также можете сортировать товары вручную, чтобы контролировать порядок их появления при циклическом просмотре.Коллекции могут содержать произвольное количество товаров, и я считаю, что по умолчанию нумерация страниц даст вам первые 20 или 50 товаров, если вы не укажете другие ограничения.При необходимости вы можете отрегулировать количество обслуживаемых продуктов до 1000, обернув цикл сбора коллекции с тегами paginate (хотя этот верхний предел определенно не рекомендуется из соображений производительности)

Пример:

{% assign ingredients = collections['love-potion-number-9'] %}
{% for product in ingredients.products %}
  <h2>{{ product.name }}!!</h2>
{% endfor %}

Недостатком обоих является то, что вы не можете писать код Liquid внутри содержимого своей статьи в Shopify, поэтому этот раздел ингредиентов должен быть записан в виде фрагмента или раздела в файлах темы и включенв шаблоне вашей статьи, использованном для этих рецептов.

Это заставляет меня задуматься над следующей проблемой - вы бы хотели включить понятие количества в ингредиенты, и пока ни одно из вышеперечисленного не дает нам этого.Итак, теперь самое сложное:

Передача этой информации в фрагмент / раздел Liquid, во-первых,

Есть несколько разных способов, которые я могу придумать, что поможет вам здесь,К сожалению, никто не совершенен.

Использование мета-полей

Мета-поля - отличный инструмент, доступный в Shopify, но, к сожалению, Shopify не делает их простыми в использовании [1].

Когда у вас есть инструмент для редактирования метаполя, придумайте структуру имен для значений «пространство имен» и «ключ».Например, вы можете создать следующие метаполя для предоставленного вами рецепта.(Примечание: как они будут введены, будет зависеть от того, какой инструмент редактирования метаполя вы используете)

namespace: 'ingredients',  // We'll use this as the 'box' that holds all our ingredients
key: 'juniper-berry-oil', // This will be the product handle for the product in question
value: '2 drops' // The quantity used for the recipe

namespace: 'ingredients',
key: 'rosemary-ct-camphor-oil',
value: '1 drop'

namespace: 'ingredients',
key: 'cypress-oil',
value: '1 drop'

... (etc) ...

Затем в файле вашей темы, где вы создаете список ингредиентов, у вас будет код, который выглядитчто-то вроде этого:

{% assign ingredients = article.metafields.ingredients %}
{% for ingredient in ingredients %}
  {% assign handle = ingredient.first %}
  {% assign amount = ingredient.last %}
  {% assign product = all_products[handle] %}

  <!-- HTML code here -->

{% endfor %}

Использование тегов и продуктов

Если вы создадите схему именования тегов, вы можете просмотреть их и использовать их для создания списка ингредиентов.Например, если вы дадите статье несколько тегов в форме ingredient_[product-handle]_[amount], вы сможете ссылаться на них как:

{% for tag in article.tags %}
  {% if tag contains 'ingredient' %}
     {% assign breakdown = tag | split: '_' %}

     {% assign handle = breakdown[1] %}
     {% assign product = all_products[handle] %}

     {% assign amount = breakdown | last %}

     <!-- HTML Code -->
  {% endif %}
{% endfor %}

Недостатком этого метода является то, что нет простого способа изменить порядоктеги, если это сделано таким образом - использование коллекции даст вам лучший контроль над этим.

Получение сумм рецептов в цикл сбора

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

{% assign ingredients = collections[article.handle] %}
{% for product in ingredients.products %}
   <!-- HTML Code here -->
{% endfor %}

Преимущество этого состоит в том, что вы можете легко сортировать ингредиенты, задав для коллекции метод ручной сортировки,но соответствующим недостатком является то, что нет очевидного места для размещения информации о количестве.

Одним из способов получения этой информации было бы использование тегов или метаполей - у метаполей было бы преимущество в возможности прямого доступа к количеству для продукта - если использовать вышеуказанное соглашение об именах в части метаполейэтот ответ, вы можете использовать:

{% assign ingredients = collections[article.handle] %}
{% for product in ingredients.products %}
  {% assign amount = article.metafields.ingredients[product.handle] %}

  <!-- HTML Code here -->
{% endfor %}

При использовании тегов вам понадобится формат, который можно разделить, как в разделе тегов, и каждый раз просматривать все теги, чтобы найти тот, который подходит для вашего продукта.Если бы ваши теги были установлены как ingredient_[product-handle]_[amount]

Если вы используете теги, вам понадобится формат, который можно разделить, как в разделе тегов, и каждый раз просматривать все теги, чтобы найти тот, который подходит для вашего продукта.,Если ваши теги были настроены так, как показано выше:

{% for tag in article.tags %}
  {% if tag contains 'ingredient' and tag contains product.handle %}
     {% assign amount = tag | split: '_' | last %}
  {% endif %}

    <!-- HTML Code -->
{% endfor %}

Надеюсь, это поможет вам начать работу!


[1] Использование мета-полей: Существует несколько возможных решений для редактирования метаполей в Shopify - мое личное предпочтение - расширение «Shopify FD» для Chrome, но последние обновленияэкраны администратора Shopify мешают этому расширению загружать и отображать панели метаполя на некоторых страницах.Я знаю, что страницы продукта все еще работают, но некоторые страницы (например, коллекции) больше не работают.

Существует также ряд приложений, доступных для вашего магазина для редактирования метаполей - я не использовал ни одно из них, поэтому я не могу говорить об их значении, но вы можете просмотреть список здесь: https://apps.shopify.com/search?q=metafield&st_source=

Если у вас есть фон кодирования, вы также можете создавать и обновлять метаполя самостоятельно, отправляя нужные данные в API администрирования Shopify - см. Документацию по https://help.shopify.com/en/api/reference/metafield, если вы хотите попробовать сделать это самостоятельно,

0 голосов
/ 12 февраля 2019

Вот верный рецепт успеха.Напишите свою статью.У него будет уникальная ручка.Сохраните это в своей голове, буфере обмена и т. Д. Теперь создайте коллекцию вручную.Дайте ему ту же ручку.Теперь вы можете сослаться на пустую коллекцию с помощью Liquid:

collection['some-handle-to-an-article']

Что если вы сейчас наполнили эту коллекцию продуктами из своего рецепта?Eureka.Гениальный!Затем вы можете перечислить их в виде простой жидкости для следующей петли, например:

{% for product in collection['some-handle-to-an-article'] %}
  {{ product.title }}
{% endfor %}

. Или вы можете быть умными штанами и сами собирать ручки продуктов.Храните их в ресурсе метаполя, назначенном статье.Например, строка типа «a-blah, b-blahblah, c-zigo-von-goober», а затем с помощью Liquid найдите это метаполе в шаблоне статьи.Разделите эту строку запятыми.Теперь используйте самые превосходные all_products вот так:

{% assign fizzbuzz = all_products['a-blah'] %}
  {{ fizzbuzz.title }}

И еще много творческих возможностей.Shopify Liquid созрел для такой игры.Без ограничений, за исключением all_products на 20 ... Вы не можете пойти дальше, чем это.

...