Timber Twig - Разделить категорию сообщений, если дата / время прошлого / настоящего / будущего - PullRequest
1 голос
/ 20 апреля 2020

Я использую ACF для связи с веб-семинарами Zoom. Я использовал ACF для добавления даты и времени начала и окончания. У меня есть стандартное условие, которое проверяет наличие прошлого / настоящего / будущего в этих полях

{% if w_start %}
    {% if current >= w_start and current <= w_end %}
        {#% present %#}
    {% elseif current > w_end %}
        {#% past %#}
    {% else %}
        {#% future %#}
    {% endif %}
{% endif %}

Как разделить список записей архива на три отдельных заголовка, определенных условием прошлого / настоящего / будущего.

Текущие вебинары


Предстоящие вебинары


Прошедшие вебинары


В настоящее время я не передаю другие аргументы этой странице.

$context['post'] = Timber::get_posts();
return Timber::render('webinar-archive.twig', $context, false);

-

{% for webinar in post %}
    {#% Do Something %#}
{% endfor %}

Создаю ли 3 отдельных цикла for? Я сортирую по условию if?

Любая помощь или направление было бы здесь здорово.

1 Ответ

0 голосов
/ 23 апреля 2020

Я предлагаю вам oop над вашими постами в шаблоне PHP, чтобы они разделялись в контексте. Функция array_reduce может помочь:

$context['posts_by_time'] = array_reduce(Timber::get_posts(), function($byTime, $post) {
  $start = strtotime($post->w_start);
  $end   = strtotime($post->w_end);

  if (time() > $start && time() < $end) {
    $section = 'current';
  } elseif (time() > $end) {
    $section = 'past';
  } else {
    $section = 'future';
  }

  // add this post to the correct section
  $byTime[$section][] = $post;

  return $byTime;
}, [
  'past'    => [],
  'current' => [],
  'future'  => [],
]);

Тогда в вашем коде представления у вас есть хороший простой массив разделов для работы:

<h2>Current Webinars</h2>
{% for webinar in posts_by_time.current %}
  {# render each current post #}
{% endfor %}

{# and so on for future & past #}

ПРИМЕЧАНИЕ: Я не тестировал этот код, но это общая идея.

...