Часы работы с использованием матрицы

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

В матрице у меня есть 7 строк с row_1, представляющих Sunday row_7 для субботы. Поэтому у меня есть два вопроса.

  • Является ли это кратким, поскольку код МОЖЕТ быть или есть лучший способ?
  • Есть ли недостаток в условном выражении, указывающий, открыт ли данный бизнес? Кажется, это работает прямо сейчас, но не очень проверено.

    {!-- Hours of Operation --}  
    {exp:stash:set name="hours-of-operation"}
    The Current time is: {current_time format="%g:%i%a"}<br/>
       {hours_of_operation}
       {if row_count=="1"}Sunday{/if}
       {if row_count=="2"}Monday{/if}
       {if row_count=="3"}Tuesday{/if}
       {if row_count=="4"}Wednesday{/if}
       {if row_count=="5"}Thursday{/if}
       {if row_count=="6"}Friday{/if}
       {if row_count=="7"}Saturday{/if}
       {open_time format="%g:%i%a"} - {close_time format="%g:%i%a"}<br/>
       {/hours_of_operation}
    {/exp:stash:set} 
    {!-- Hours of Operation --}
    
    {!-- Are we open? --}
    {exp:stash:set name="are-we-open"}
    {exp:mx_calc expression='{current_time format="%w"}+1'}
        {!-- matrix --}
        {hours_of_operation}                
            {if row_count=="{calc_result}"}
                Today is: {current_time format="%l"}<br/>
        <strong>
                {if '{open_time format="%H%i"}' <= '{current_time format="%H%i"}' && '{close_time format="%H%i"}' <= '{current_time format="%H%i"}'}    
                We are currently open!{if:else}We are currently closed.
            {/if}
            </strong><br/>
                Today Hours are:<br/> <strong>{open_time format="%g:%i%a"} - {close_time format="%g:%i%a"}</strong><br/>              
            {/if}   
        {/hours_of_operation} 
        {!-- matrix --}
    {/exp:mx_calc}
    {/exp:stash:set}
    {!-- Are we open? --}
    

enter image description here

Ответ 1

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

Ответ 2

Эта логика не должна работать:

{if '{open_time format="%H%i"}' <= '{current_time format="%H%i"}' && '{close_time format="%H%i"}' <= '{current_time format="%H%i"}'} 

Вы проверяете, что время закрытия и открытия меньше, чем current_time, а не проверка того, что current_time находится между этими двумя значениями. Если бизнес открыт, то close_time должен быть больше current_time, не менее. Логика должна быть:

{if 
    '{open_time format="%H%i"}' <= '{current_time format="%H%i"}' && 
    '{close_time format="%H%i"}' > '{current_time format="%H%i"}'
} 

Также, если мы придирчивы, что делают люди, если они должны вводить данные для бизнеса, который полностью закрыт на один или несколько дней недели? Если бы это был я, я бы выбрал PT Switch в качестве столбца "Закрытый весь день", по умолчанию - нет. Это потребует только небольшой настройки вашей существующей логики:

{if
    '{open_time format="%H%i"}' <= '{current_time format="%H%i"}' && 
    '{close_time format="%H%i"}' > '{current_time format="%H%i"}' && 
    '{closed_all_day}' != 'y'
}    
    We're currently open!
{if:else}

Затем в цикле {hours_of_operation}:

{if closed_all_day != 'y'}
    {open_time format="%g:%i%a"} - {close_time format="%g:%i%a"}<br/>
{else}
    Closed<br/>
{/if}