Назначение коллекции пользовательской странице коллекции в Shopify? - PullRequest
0 голосов
/ 14 января 2019

Я использую бесплатную тему Venture на Shopify и пытаюсь создать собственную страницу коллекции.

Я нашел решение в stackoverflow, но оно помогло где-то. Как добавить collection.liquid на существующую страницу?

Сумма решения: Скопируйте все, что находится в collection.liquid, и вставьте его в новый фрагмент (скажем, вы называете это collection-copy.liquid). Затем на странице, на которую вы хотите добавить страницу коллекций, просто добавьте {% include 'collection-copy'%}

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

Веб-страница: https://mottomfreedom.com/pages/less-is-more

Есть ли у вас идея назначить коллекцию с помощью этого пользовательского фрагмента?

{% paginate collections[settings.frontpage_collection].products by 20 %}

<div class="page-width">

  <header class="grid medium-up--grid--table section-header small--text-center">
    <div class="grid__item medium-up--one-half section-header__item">
      <h1 class="section-header__title">
        {{ collection.title }}
        {% if current_tags %}
          &ndash; {% assign title_tags = current_tags | join: ', ' %}
          {{ title_tags }}
        {% endif %}
      </h1>
      {% if collection.description != blank %}
        <div class="section-header__subtext rte">
          {{ collection.description }}
        </div>
      {% endif %}
    </div>
    <div class="grid__item medium-up--one-half medium-up--text-right section-header__item">
      {% section 'collection-filters' %}
    </div>
  </header>

  <div class="grid grid--no-gutters grid--uniform">

    {% for product in collection.products %}
      <div class="grid__item small--one- medium-up--one-third">
        {% include 'product-card', product: product %}
      </div>
    {% else %}
      {% comment %}
        Add default products to help with onboarding for collections/all only.

        The onboarding styles and products are only loaded if the
        store has no products.
      {% endcomment %}
      {% if shop.products_count == 0 %}
        <div class="grid__item">
          <div class="grid grid--no-gutters grid--uniform">
            {% assign collection_index = 1 %}
            {% for i in (1..10) %}
              {% case i %}
                {% when 7 %}
                  {% assign collection_index = 1 %}
                {% when 8 %}
                  {% assign collection_index = 2 %}
                {% when 9 %}
                  {% assign collection_index = 3 %}
                {% when 10 %}
                  {% assign collection_index = 4 %}
              {% endcase %}
              <div class="grid__item small--one-half medium-up--one-fifth">
                <a href="/admin/products" class="product-card">
                  <div class="product-card__image-container">
                    <div class="product-card__image-wrapper">
                      <div class="product-card__image">
                        {% capture current %}{% cycle 1, 2, 3, 4, 5, 6 %}{% endcapture %}
                        {{ 'product-' | append: current | placeholder_svg_tag: 'placeholder-svg' }}
                      </div>
                    </div>
                  </div>
                  <div class="product-card__info">
                    <div class="product-card__name">{{ 'homepage.onboarding.product_title' | t }}</div>
                    <div class="product-card__price">
                      $19.99
                    </div>
                  </div>
                  <div class="product-card__overlay">
                    {% assign view_string_length = 'products.product.view' | t | size %}
                    <span class="btn product-card__overlay-btn {% if view_string_length > 8 %} btn--narrow{% endif %}">{{ 'products.product.view' | t }}</span>
                  </div>
                </a>
              </div>
              {% assign collection_index = collection_index | plus: 1 %}
            {% endfor %}
          </div>
        </div>
      {% else %}
        {% comment %}
          If collection exists but is empty, display message
        {% endcomment %}
        <div class="grid__item small--text-center">
          <p>{{ 'collections.general.no_matches' | t }}</p>
        </div>
      {% endif %}
    {% endfor %}
  </div>

  {% if paginate.pages > 1 %}
    <div class="pagination">
      {{ paginate | default_pagination | replace: '&laquo; Previous', '&larr;' | replace: 'Next &raquo;', '&rarr;' }}
    </div>
  {% endif %}

</div>

{% endpaginate %}

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Вы правы, что дали некоторое время, прежде чем принять ответ :)) Решение сработало, но заставило меня создать 1 страницу и 4 жидких файла для каждой коллекции. И в конце я понял, что некоторые разделы, такие как collection.list, не указывают на страницу, которую я создал. Я думаю, что вы говорили об этом в начале ответа:)

После этого я нашел гораздо лучшее решение. Простое создание нового файла section.liquid и помещение его в «collection.liquid» с помощью оператора «if» решило мою проблему.

{% if collection.handle == 'less-is-more' %}
      	{% section 'custom-featured-products-LESSisMORE' %}

{% endif %}

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

0 голосов
/ 14 января 2019

Похоже, что нигде не определена переменная collection.

Я бы предложил изменить начало фрагмента кода с:

{% paginate collections[settings.frontpage_collection].products by 20 %}

Кому:

{% assign collection = collections[settings.frontpage_collection] %}
{% paginate collection.products by 20 %}

Существует неявная переменная collections всякий раз, когда вы находитесь на странице, которая включает в себя /collections/[something] в URL, но когда вы находитесь на URL, который /page/[something], у вас есть неявная переменная page в Liquid вместо этого.

  1. Примечание: если набор, установленный в значении вашей темы для settings.frontpage_collection, не тот, который вам нужен, вы можете:

    а. Измените значение, используя ссылку «Настроить» рядом с вашей темой (проще всего найти на странице / admin / themes), полезно, если вы не собираетесь использовать эту настройку для чего-либо еще;

    б. Жесткий код дескриптора коллекции, например: collections['i-am-sure-this-will-never-change'], но жестко закодированные строки некрасивы и обычно их следует избегать;

    с. Создайте свой собственный параметр темы, добавив запись в config/settings_schema.json - см. https://help.shopify.com/en/themes/development/theme-editor/settings-schema, если вы все еще в курсе всех настроек пользовательской темы; или

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

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

  1. Создайте файл в папке «snippets» вашей темы. (Например, допустим, файл называется collection-in-page.liquid. Мы передадим коллекцию в этот фрагмент, поэтому вы можете удалить оператор assign.
  2. В своем шаблоне для конкретной страницы определите, каким будет дескриптор коллекции

    а. Это может быть жестко запрограммировано, или это может быть что-то, что вы можете найти, используя метаполя или теги на странице. Примеры: {% assign collection_handle = 'hardcoded-handle' %}, {% assign collection_handle = page.metafields.related_items.collection %}

  3. В шаблоне вашей страницы включите созданный вами фрагмент. Я считаю, что это помогает явно передавать любые переменные, которые я хочу использовать, например:

    {% include 'collection-in-page', collection: collections[collection_handle] %}

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...