Справочная информация: мне нужно создать несколько таблиц в представлениях, которые показывают объекты, которые имели определенный статус (на основе поля таксономии) в течение x рабочих дней. Я уже настроил поля и правила таким образом, что каждый раз, когда объект меняет свой статус, поле даты и времени заполняется текущей датой и временем.
Затем я создал пользовательский модуль, который добавил настраиваемые поля в представление, показывающее, сколько рабочих дней прошло с даты и времени. Я думал, что все было отлично, пока не понял, что не могу фильтровать эти настраиваемые поля (по понятным мне причинам).
Поэтому я частично вернулся к чертежной доске, чтобы переделать эту концепцию, но в качестве пользовательского фильтра вместо поля... но мне трудно понять, как создать этот пользовательский фильтр в моем модуле. Я решил, что могу повторно использовать php-скрипт, который принимает поле даты и текущую дату, чтобы рассчитать, сколько рабочих дней прошло.
За исключением требования рабочих дней, я почти могу делать то, что хочу, прямо из коробки, используя фильтр даты Views с оператором «меньше или равно» и значением смещения (поэтому я хочу показывать только объекты, которые старше чем два дня, поэтому я использовал «-2 дня» для значения).
Редактировать: я думаю, что понял это.
Вот как я думаю, будет процесс создания нашего SQL-запроса, в котором используются рабочие дни вместо календарных дней (переменные, которые я создаю, предназначены для этого примера, а не буквально для того, что я буду использовать в коде):
Получите текущий день и время (в этом примере мы назовем это $date) и передайте его в PHP-скрипт, который выдает, какой день был бы 2 рабочих дня назад. В этом примере я назову это $oldDate
Если бы сегодняшняя дата была 07.02.22, это было бы 03.02.22. Если бы сегодняшняя дата была 10.02.22, это было бы 08.02.22.
Вычтите $oldDate из $date. Мы назовем это значение $days.
Если бы сегодняшняя дата была 07.02.22, это было бы 4. Если бы сегодняшняя дата была 10.02.22, это было бы 2.
Умножьте $days на 86400, что является количеством секунд в 1 дне.
Если бы сегодняшняя дата была 07.02.22, это было бы 345 600. Если бы сегодняшняя дата была 10.02.22, это было бы 172800. Мы назовем это значение $seconds.
Тогда наш SQL-запрос будет иметь вид node_field_data.created <= $unixDate-$seconds.