Здравствуйте. На 8ке через вьюс вывожу некий контент. Надо сделать так, чтобы некоторый отображался только в определенное время дня, например с 14 до 16. Может кто сталкивался с подобной задачей?
Думал сделать поле время и в фильтрах задать условие фильтрации. Может там как то можно сравнить значение поля ноды с date() php или еще какой нибудь способ?
Комментарии
Это-то запросто - подставить волшебное слово now в качестве Value при настройке фильтра. Но я не очень понимаю как это решит проблему: сравнивать-то надо отдельно время дня, а не весь DateTime...
Все верно. А из now часы никак не вытащить? Чтоб потом сравнить его с цифровым полем, а не DateTime.
https://www.drupal.org/project/block_date - не?
или сложнее надо?
Судя по скрину, блок будет показываться в выбранный интервал времени. А мне надо ежедневно с стольки-то до стольки-то
$hour = date('G');
Это сработает в настройках фильтрации views?
Это присвоит переменной $hour числовое значение текущего часа - от 0 до 23
Сарказм? Я в курсе про функцию date(). Вопрос в том, как это применить в Drupal, а точнее в фильтре views, а не как написать php код.
Это ответ на вопрос
Вот вам часы, сравнивайте.
Это то как раз и понятно. Мне не понятно где создать перменную $hours и как ее передать в фильтры views, чтобы там сравнивать с числовым полем.
Можно попробовать так - Глобальное поле Пользовательский текст, а там можно написать любую проверку, например,
{{ выводить нужные поля }}
{% else %}
{{ либо ничего, либо другие поля }}
{% endif %}
Проверил на тестовом сайте ваш вариант - да он рабочий, но вернувшись к боевому сайту выяснилось, что в представлении у меня выводится сущность коммерца "Товар". Т.е. не получится добавить Глобальное поле -> Пользовательский текст
Надо как то мудрить с Фильтрацией во вьюшке. Или как подсказывали выше с переменной. Но я так и не понял как и откуда ее передать в вьюс.
Ну если никто не знает как добиться искомого от функции PHP strtotime(), которая обрабатывает значение поля Value при настройке фильтра по дате, то остается имплементировать хук HOOK_views_query_alter(). Ничего там сложного нет.
Натыкался на него когда гуглил, но думал может есть какие-то другие решения. Спасибо вам и всем отписавшимся. Ушел читать документацию о данном хуке!
Я бы все-таки написал хендлер для вьюсового аргумента, значением по умолчанию у которого был бы текущий час.
В этом случае можно будет кешировать результаты вьюса в зависимости от аргумента (надо проверить, но должно работать).
И при вычислении текущего часа неплохо бы учитывать таймзону текущего пользователя, а то в Петропавловске-Камчатском полночь.
а в каком месте документации можно об этом почитать, не скажете?
Тут или тут, например. Или посмотреть в коде самих вьюсов:
core/modules/views/src/Plugin/views/argument
core/modules/views/src/Plugin/views/argument_default
Возможно, в одном аргументе не удастся создать условие BETWEEN, тогда потребуется создать пару аргументов: один для условия больше чем значение по умолчанию, второй - меньше.
Ок, спасибо