Вывод поля Views в зависимости от даты

Главные вкладки

Аватар пользователя zoolook zoolook 5 февраля 2015 в 20:59

Здравствуйте!

У меня во views есть выборка нод с упорядочиванием по термину таксономии. Можно ли вывести у каждой ноды дополнительно поле "да"/"нет", которое бы зависело от даты в этой ноде и попадало в промежуток, выбранный пользователем. Дата задается пользователем при создании ноды с помощью модуля Date и представляет из себя диапазон значений, например время актуальности товара.

При этом я сам разобрался как вывести только ноды, которые попадают по текущей дате в этот диапазон, или не попадают, но мне нужно именно чтобы было поле вроде "да, попадает" или "нет, не попадает", а выводились бы все ноды.

Буду благодарен за помощь!

Комментарии

Аватар пользователя zoolook zoolook 5 февраля 2015 в 21:36

Или может быть можно заставить views в результатом короткого запроса заполнить поле в ноде? А уже потом взять значение этого поля...

Аватар пользователя bumble bumble 5 февраля 2015 в 23:24

"zoolook" wrote:
Можно ли вывести у каждой ноды дополнительно поле "да"/"нет"

В чем проблема то? Поле типа "Логическое". В помощь: Boolean formatter.
"zoolook" wrote:

Или может быть можно заставить views в результатом короткого запроса заполнить поле в ноде


Views не устанавливает значения, а выводит их из БД.
Если нужно автоматически присваивать значения по условиям: Rules.

Аватар пользователя zoolook zoolook 7 февраля 2015 в 0:23

bumble wrote:

В чем проблема то? Поле типа "Логическое". В помощь: Boolean formatter.

Да, только его надо вывести по условию попадения в дату, т.е. используя контекстные фильтры, а оно будет редактировать вывод всех материалов, а не только этого поля.

bumble wrote:
Views не устанавливает значения, а выводит их из БД.
Если нужно автоматически присваивать значения по условиям: Rules.

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

Аватар пользователя Никки Никки 6 февраля 2015 в 10:25

Как вариант (требует знания php) - добавить в вашем вьюсе поле "Глобальный пользовательский текст". В этом поле из шаблонов подставьте свои даты и прочую инфу, которая определяет "да" или "нет". Затем темизировать это поле. В файле распарсить переменную $output на необходимые значение и из них составить нужное условие. И собственно сделать вывод ваших "да" или "нет"

Аватар пользователя zoolook zoolook 7 февраля 2015 в 0:32

Никк wrote:
Как вариант (требует знания php) - добавить в вашем вьюсе поле "Глобальный пользовательский текст". В этом поле из шаблонов подставьте свои даты и прочую инфу, которая определяет "да" или "нет". Затем темизировать это поле. В файле распарсить переменную $output на необходимые значение и из них составить нужное условие. И собственно сделать вывод ваших "да" или "нет"

Да, тоже подумал об этом, но к сожалению не знаю php. Мне нужен именно запрос, что "сегодняшняя дата попадает в диапазон поля node_data", добавленное пользователем. А то, что я могу выдернуть в "глобальный пользовательский текст" - это то, что вообще есть запись в календаре или нет, но это мне не поможет, т.к. она не обязательно будет приходится на сегодняшнюю дату.

Т.е. упрощая задачу - могу сказать, как мне сравнить сегодняшнюю дату с датой в ноде? И если попадает - вывести "да" если нет, то ничего не выводить.

Аватар пользователя zoolook zoolook 7 февраля 2015 в 13:26

А может быть как-то можно импортировать другой запрос views в поле "глобальный пользовательский текст"?

Аватар пользователя Никки Никки 9 февраля 2015 в 12:31

"zoolook" wrote:
Мне нужен именно запрос, что "сегодняшняя дата попадает в диапазон поля node_data", добавленное пользователем. А то, что я могу выдернуть в "глобальный пользовательский текст" - это то, что вообще есть запись в календаре или нет, но это мне не поможет, т.к. она не обязательно будет приходится на сегодняшнюю дату.

А что мешает в "глобальный пользовательский текст" добавить поле node_data ?

Аватар пользователя zoolook zoolook 9 февраля 2015 в 12:48

"Никк" wrote:
А что мешает в "глобальный пользовательский текст" добавить поле node_data ?

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

Аватар пользователя Никки Никки 9 февраля 2015 в 13:08

про контекстные фильтры ниче толком не знаю, мало с ними общался. Могу лишь свой (php-шный) вариант попытаться довести до конца. У вас как именно выводится поле node_data, если вы его выведите в "глобальном пользовательском тексте"?

Аватар пользователя zoolook zoolook 9 февраля 2015 в 13:39

"Никк" wrote:
У вас как именно выводится поле node_data, если вы его выведите в "глобальном пользовательском тексте"?

[field_auto_calendar]

Аватар пользователя zoolook zoolook 9 февраля 2015 в 14:24

Даты на странице выводятся с помощью модуля Calendar для Views, в блоке, с контекстным фильтром, который выдергивает ID ноды из url. Вводится пользователем с помощью модуля Date.

Аватар пользователя Никки Никки 9 февраля 2015 в 14:44

вот ты добавил в Глобальный пользовательский текст [field_auto_calendar], сохранил вьювс. Перешел на страницу сайта и что видишь? как отображается твой диапазон? Типа так: 2014-02-09 to 2014-03-15? Или как-то еще?

Аватар пользователя zoolook zoolook 9 февраля 2015 в 15:42

"Никк" wrote:
Типа так: 2014-02-09 to 2014-03-15?

Да, все верно! Если поле не заполнено, то ничего не выводится. Если больше 1 значения диапазона, то через "," все значения от и до.

Аватар пользователя Никки Никки 9 февраля 2015 в 15:52

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

Аватар пользователя Никки Никки 9 февраля 2015 в 16:23

Quote:
понедельник, 2 февраля, 2015 to воскресенье, 8 февраля, 2015, пятница, 27 февраля, 2015 to суббота, 28 февраля, 2015

если я правильно понял, то для каждый ноды может быть только один диапазон дат. Или нет? Здесь у тебя два диапазона...

Аватар пользователя zoolook zoolook 9 февраля 2015 в 19:36

Для каждой ноды может быть неограниченный диапазон дат. Вывод дат календаря можно и настроить в виде "02.02.2015 to 08.02.2015,..." Могу, конечно и ограничить, но я не понимаю, что ты хочешь предложить? Распарсить даты? Просто это будет очень сложным костылем, я думал есть какое-то решение проще, к примеру настроить контекстный фильтр для определенного поля views, а не для всей выборки.

Аватар пользователя Никки Никки 10 февраля 2015 в 9:47

Да, темизировать поле "Глобальный пользовательский текст" (http://php-include.ru/stati/temizatsiya-shablona-views), заменив в нем вывод диапазона дат на вывод "попадает", если текущая дата входит в диапазон или "не попадает", если не входит. То, как ты хотел. Это не костыль, а обычная практика в друпале. И это было бы просто (php код - пара строчек), если бы диапазон был один. Но если таких диапазонов в одной ноде куча, тогда, боюсь, это не вариант.

Контекстный фильтр - это фильтр. То есть он отсекает часть твоих нод. фильтрует. Ты же хочешь выводить все (то есть без фильтра), но чтобы было указание: попадает или нет.

Аватар пользователя zoolook zoolook 10 февраля 2015 в 13:02

"Никк" wrote:
Контекстный фильтр - это фильтр. То есть он отсекает часть твоих нод. фильтрует. Ты же хочешь выводить все (то есть без фильтра), но чтобы было указание: попадает или нет.

Да, я думал что может можно настроить контекстный фильтр только по полю. Попробую разобраться, спасибо за ссылку. Но, в принципе, можно ограничить и одной записью! Если это сделать, то как будет выглядеть код?

В общем, спасибо за помощь! Буду пытаться разбираться…

Аватар пользователя Никки Никки 10 февраля 2015 в 14:02

"zoolook" wrote:
Если это сделать, то как будет выглядеть код?

При условии, что поле "глобальный пользовательский текст" будет выводить строго следующий формат дат:
2015-02-08 to 2015-02-12

код будет таким:

<?php

$explode

=explode(' to ',$output);
$data1=strtotime($explode[0]);
$data2=strtotime($explode[1]);

$today=strtotime(date('Y-m-d'));

if(

$today>=$data1 && $today<=$data2) echo 'попадает';

?>

этот код не учитывает, что может быть введена только одна дата...нужно доп условия делать. Но если ты пойдешь именно по этому пути - допишем.

Аватар пользователя zoolook zoolook 10 февраля 2015 в 16:16

Отлично! Но запросто может быть так, что будет вбито только одно значение, тут уж я не могу ограничить…