Skip to content

Instantly share code, notes, and snippets.

@pafnuty
Last active June 9, 2016 17:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pafnuty/6f56984c048704b62b04 to your computer and use it in GitHub Desktop.
Save pafnuty/6f56984c048704b62b04 to your computer and use it in GitHub Desktop.
Пример вывода новостей с группировкой по дням через модуль BlockPro 4
{* Пример вывода новостей с группировкой по дням *}
{* Определяем пустой массив для сгруппированных новостей *}
{set $groupList = []}
{*
Пробегаем по существующему массиву с новостями и
собираем новый массив, группируя его по нужному параметру
*}
{foreach $list as $key=>$item}
{* Для начала определим параметр группировки *}
{*
В даном случаи это дата новости в формате [год][номер месяца][число месяца],
это будет ключ будущего нового массива,
таким образом новости сгруппируются по дням
*}
{set $groupKey = $item.date|dateformat:'Ymd'}
{* Теперь определим название (заголовок) группы на основе даты*}
{*
Если приведение текущего unix времени к формату [год][номер месяца][число месяца]
равно дате новости — значит название группы будет "Сегодня"
*}
{if $groupKey == $.php.time()|date_format:"%Y%m%d"} {* https://goo.gl/QrL5N7 *}
{set $groupName = $lang.time_heute}
{*
Если приведение текущего unix времени к формату [год][номер месяца][число месяца],
за вычетом одного дня равно дате новости — значит название группы будет "Вчера"
*}
{elseif $groupKey == ($.php.time()-86400)|date_format:"%Y%m%d"}
{set $groupName = $lang.time_gestern}
{* В противном случае название группы будет равно дате в формате дд.мм.гггг *}
{else}
{set $groupName = $item.date|dateformat:'d.m.Y'}
{/if}
{* Теперь соберём элементы нового массива с новостями *}
{set $groupList[$groupKey]['name'] = $groupName}
{set $groupList[$groupKey]['news'][] = $item}
{/foreach}
{* Больше этот массив с новостями нам не нужен, удалим его из памяти *}
{unset $list}
{* Для проверки результата операции можно воспользоваться модификатором dump *}
{* <pre><code>{$groupList|dump}</code></pre> *}
{* Теперь можно пройтись по новому массиву новостей и вывести результаты *}
{foreach $groupList as $group}
{* Выводим название группы *}
<h2>{$group.name}</h2>
<hr>
{* Выводим новости группы *}
<div class="group-news">
{*
Т.к. массив с новостями группы хранится в $group.news,
то и цикл будет именно по $group.news, а не по $group
*}
{foreach $group.news as $el}
{* Тут уже работаем как с обычной новостью *}
<div class="group-news-item">
<h4>{$el.title}</h4>
<i>Опубликовано в: {$el.date|dateformat:'H:i'}</i>
<p>{$el.short_story|limit:'200'}</p>
</div>
{/foreach}
</div>
{/foreach}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment