Слайдер статей

Как разделить статьи на группы по 4 штуки?

#1 18 декабря 2013 в 15:05
Добрый день!
Делаю слайдер. В каждом слайде выводится 4 стать. Остальные статьи, так-же по 4 в группе скрыты.
  1.  
  2. <div class="slider-b">
  3. <div class="module-b">
  4. {foreach key=aid item=article from=$articles}
  5. {*Вывод статьи*}
  6. {/foreach}
  7. </div>
  8. </div>
  9.  
Необходимо переделать этот код, что-бы внутри <div class="module-b"> было только 4 статьи, а для новых создался еще один блок <div class="module-b"> и опять-же с 4 статьями и так пока статьи не закончатся.
Для этого внутри цикла foreach нужен счетчик, которые если дошел до 4 сбрасывался и вставлял новый div. Но как это реализовывать без понятия.
Кто знает помогите плз.
#2 18 декабря 2013 в 16:07
В качестве счетчика в большинстве случаев можно использовать aid, в конце концов можно и index добавить, это не проблема. Главное не забыть, что число элементов в массиве вполне может быть не кратно четырем.
#3 18 декабря 2013 в 19:57
Pasha, просто я ни разу не программист php, поэтому прошу помощи как это реализовывается)
Я думал на счет aid, но я не понял что это: id статьи, или счетчик который считает по порядку от нуля? Т.к. если это просто id он мне не поможет… если же счетчик, то наверное можно что-то придумать.
#4 18 декабря 2013 в 20:35

Остальные статьи, так-же по 4 в группе скрыты.

ImNIK

и опять-же с 4 статьями и так пока статьи не закончатся.

ImNIK
Плохое решение. Выборку статей лучше производить группами по 4 используя LIMIT .
Оператор foreach опирается на внутренний указатель массива, его изменение внутри цикла может привести к непредсказуемому поведению.
#5 18 декабря 2013 в 20:58
Сделал до ужаса криво и не масштабируемо, но работает :)
  1.  
  2. <div class="slider-b">
  3. {foreach key=aid item=article from=$articles}
  4. {if $aid == 0 || $aid == 4 || $aid == 8}
  5. <div class="module-b">
  6. {/if}
  7. *** Вывод статьи ***
  8. {if $aid == 3 || $aid == 7 || $aid == 11}
  9. </div>
  10. {/if}
  11. {/foreach}
  12. </div>
  13.  
Если подскажите как сделать по умнее буду благодарен. Про LIMIT почитаю, может поможет как-то улучшить этот код.
#6 19 декабря 2013 в 01:49
А чем не устраивает вывод нужного количества уже в скрипте слайдера (т.е. сначала передать, а уж после решать сколько будет выводиться за раз)? Может не понимаю чего (не программер)…
#7 19 декабря 2013 в 04:19
Сложно сказать что это за чудо слайдер такой, но как бы там нибыло, а для получения заданной структуры нужно наваять что-то вроде этого:
  1. {foreach key = tid item = photo from = $photos name = c}
  2. {if $smarty.foreach.c.index % 4 == 0 && !$smarty.foreach.c.first && !$smarty.foreach.c.last}</div>{/if}
  3. {if $smarty.foreach.c.index % 4 == 0}<div class="module-b">{/if}
  4. Что-то там с номером {$tid},
  5. {if $smarty.foreach.c.last}</div>{/if}
  6. {/foreach}
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.