Рейтинг:0

Создайте настраиваемый фильтр представлений для возврата узлов на основе прошедших рабочих дней с момента поля даты.

флаг au

Справочная информация: мне нужно создать несколько таблиц в представлениях, которые показывают объекты, которые имели определенный статус (на основе поля таксономии) в течение 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.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.