Хотели бы создать страницу продуктов Большого картеля, содержащую определенные категории

В настоящее время я создаю персонализированную страницу на моем сайте Большого картеля. На этой странице я хотел бы показать список товаров из определенных категорий (например, рубашки, куртки и джинсы). Текущий код, который у меня есть:

{% for product in products %}
  {% if forloop.first %}
    <ul id="products" class="{% if forloop.length == 1 %}single_product{% endif %}{% if forloop.length == 2 %}double_product{% endif %}">
  {% endif %}
  <li id="product_{{ product.id }}" class="product">
    <a href="{{ product.url }}" title="View {{ product.name | escape }}">
      <div class="product_thumb">
        <img src="{{ product.image | product_image_url | constrain: '560' }}" class="fade_in" alt="Image of {{ product.name | escape }}">
      </div>
      <div class="product_header">
        <h2>{{ product.name }}</h2>
        <span class="dash"></span>            
        <h3>{{ product.default_price | money_with_sign }}</h3>
        {% case product.status %}
        {% when 'active' %}
          {% if product.on_sale %}<h5 class="mmi-accent">On Sale</h5>{% endif %}
        {% when 'sold-out' %}
            <h5 class="mmi-accent">Sold Out</h5>
        {% when 'coming-soon' %}
            <h5 class="mmi-accent">Coming Soon</h5>
        {% endcase %}
      </div>
    </a>
  </li>
  {% if forloop.last %}
    </ul>
  {% endif %}
{% endfor %}

В настоящее время проблема заключается в том, что приведенный выше код показывает все продукты из каждой имеющейся у меня категории.

Я видел здесь аналогичный вопрос: Как использовать BigCartel Переменные для вызова разных категорий продуктов

Он посоветовал, как перейти от всех продуктов к определенной отдельной категории, отредактировав открывающий for цикл. Так это выглядело бы так:

{% for product in categories.shirts.products %}

Опять же, будет отображаться только список товаров категории «Рубашки». Я хотел бы также включить в этот список «Куртки» и «Джинсы». Это возможно?

Заранее спасибо.


person Richard Teahan    schedule 05.02.2017    source источник


Ответы (2)


В конце концов, мне удалось решить проблему, повозившись с кодом. Обычно создается 3 for цикла как li (или цикл для каждой требуемой категории) внутри самого ul.

Вот полный пример кода:

<ul id="products">

  {% for product in categories.jacket.products %}
  <li id="product_{{ product.id }}" class="product">
    <a href="{{ product.url }}" title="View {{ product.name | escape }}">
      <div class="product_thumb">
        <img src="{{ product.image | product_image_url | constrain: '560' }}" class="fade_in" alt="Image of {{ product.name | escape }}">
      </div>
      <div class="product_header">
        <h2>{{ product.name }}</h2>
        <span class="dash"></span>            
        <h3>{{ product.default_price | money_with_sign }}</h3>
        {% case product.status %}
        {% when 'active' %}
          {% if product.on_sale %}<h5>On Sale</h5>{% endif %}
        {% when 'sold-out' %}
            <h5>Sold Out</h5>
        {% when 'coming-soon' %}
            <h5>Coming Soon</h5>
        {% endcase %}
      </div>
    </a>
  </li>
  {% endfor %}

 {% for product in categories.dress.products %}
  <li id="product_{{ product.id }}" class="product">
    <a href="{{ product.url }}" title="View {{ product.name | escape }}">
      <div class="product_thumb">
        <img src="{{ product.image | product_image_url | constrain: '560' }}" class="fade_in" alt="Image of {{ product.name | escape }}">
      </div>
      <div class="product_header">
        <h2>{{ product.name }}</h2>
        <span class="dash"></span>            
        <h3>{{ product.default_price | money_with_sign }}</h3>
        {% case product.status %}
        {% when 'active' %}
          {% if product.on_sale %}<h5>On Sale</h5>{% endif %}
        {% when 'sold-out' %}
            <h5>Sold Out</h5>
        {% when 'coming-soon' %}
            <h5>Coming Soon</h5>
        {% endcase %}
      </div>
    </a>
  </li>
  {% endfor %}

  {% for product in categories.baby-grow.products %}
  <li id="product_{{ product.id }}" class="product">
    <a href="{{ product.url }}" title="View {{ product.name | escape }}">
      <div class="product_thumb">
        <img src="{{ product.image | product_image_url | constrain: '560' }}" class="fade_in" alt="Image of {{ product.name | escape }}">
      </div>
      <div class="product_header">
        <h2>{{ product.name }}</h2>
        <span class="dash"></span>            
        <h3>{{ product.default_price | money_with_sign }}</h3>
        {% case product.status %}
        {% when 'active' %}
          {% if product.on_sale %}<h5>On Sale</h5>{% endif %}
        {% when 'sold-out' %}
            <h5>Sold Out</h5>
        {% when 'coming-soon' %}
            <h5>Coming Soon</h5>
        {% endcase %}
      </div>
    </a>
  </li>
  {% endfor %}

</ul>

Надеюсь, что это поможет кому-то еще.

person Richard Teahan    schedule 06.02.2017

Вот еще один (DRY -er) способ:

{% for category in categories.active %}
  {% if category.name contains 'jacket' or category.name contains 'dress' or category.name contains 'baby-grow' %}
    <h2>{{ category.name }}</h2>
    {% for product in category.products %}
      <p>{{ product.name }}</p>
      <img src="{{ product.image | product_image_url | constrain: '50' }}">
    {% endfor %}
  {% endif %}
{% endfor %}

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

person David    schedule 07.04.2017