2015-03-17 6 views
2

Мне нужна помощь. Я создаю свою собственную тему BigCartel, и у меня возникает следующая проблема: в настоящее время я перечисляю все свои продукты на главной странице продукта (их не так много), и я пытаюсь обернуть каждый четвертый продукт в пределах дела. В принципе у меня естьОберните каждый четвертый продукт в div

<div class="product"></div> 
<div class="product"></div> 
<div class="product"></div> 
<div class="product"></div> 
<div class="product"></div> 

и конечный результат, который я хочу

<div class="wrap"> 
    <div class="product"></div> 
    <div class="product"></div> 
    <div class="product"></div> 
    <div class="product"></div> 
</div> 
<div class="wrap"> 
    <div class="product"></div> 
</div> 

Я не знаю, как я должен это сделать, используя свой язык шаблонов.

+2

так, что ваша проблема? – racecarjonathan

+0

@racecarjonathan Я не уверен, как я должен это делать, используя их [язык шаблонов] (https://help.bigcartel.com/developers/themes/) – Seb

+1

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

ответ

2

Используя template language, я думаю, что это можно сделать так:

<div class="wrap"> 

{% for product in products.all %} 
    <div class="product "> 
    {{ product.name }} </div> 
    {% if forloop.index % 4 == 0 %} 
    </div> 

    <div class="wrap"> 

    {% endif %} 
{% endfor %} 

</div> 
2

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

var products = document.querySelectorAll('.products'), 
    wraps = document.querySelectorAll('wrap'); 
[].forEach.call(products, function(e, i){ 
    wraps[Math.floor(i/4)].appendChild(e); 
}) 
3

Использование JQuery:

var wraps = $('.wrap'); 
$('.products').each(function(e, i){ 
    wraps[Math.floor(i/4)].appendChild(e); 
}) 

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

+0

Пожалуйста, добавьте некоторое объяснение в свой ответ. – vinitius

+0

@ mohmad-taher Спасибо за ваш ответ. Однако, если я попытаюсь использовать ваш метод, я получаю следующую ошибку: «Uncaught TypeError: Не удается прочитать свойство« appendChild »неопределенного« – Seb

+1

»var wraps = $ ('wrap');' должно быть 'var wraps = $ ('. Wrap'); ' – Bwaxxlo

0

Я понимаю, что этот вопрос немного старый, но я обнаружил, что принято отвечать не работает.

Это, как я получил его на работу на языке шаблонного (который является своего рода Liquid?):

{% for product in products %} 

    {% assign zeroindexmodfour = forloop.index0 | modulo: 4 %} 
    {% assign indexmodfour = forloop.index | modulo: 4 %} 

    {% if zeroindexmodfour == 0 %} 
    <div class="wrap"> 
    {% endif %} 

    <div class="product"></div> 

    {% if indexmodfour == 0 or forloop.last %} 
    </div> 
    {% endif %} 

{% endfor %} 
Смежные вопросы