Здравствуйте!
У меня во views есть выборка нод с упорядочиванием по термину таксономии. Можно ли вывести у каждой ноды дополнительно поле "да"/"нет", которое бы зависело от даты в этой ноде и попадало в промежуток, выбранный пользователем. Дата задается пользователем при создании ноды с помощью модуля Date и представляет из себя диапазон значений, например время актуальности товара.
При этом я сам разобрался как вывести только ноды, которые попадают по текущей дате в этот диапазон, или не попадают, но мне нужно именно чтобы было поле вроде "да, попадает" или "нет, не попадает", а выводились бы все ноды.
Буду благодарен за помощь!
Комментарии
Или может быть можно заставить views в результатом короткого запроса заполнить поле в ноде? А уже потом взять значение этого поля...
В чем проблема то? Поле типа "Логическое". В помощь: Boolean formatter.
Views не устанавливает значения, а выводит их из БД.
Если нужно автоматически присваивать значения по условиям: Rules.
Да, только его надо вывести по условию попадения в дату, т.е. используя контекстные фильтры, а оно будет редактировать вывод всех материалов, а не только этого поля.
Rules тут тоже я не вижу как может помочь, т.к. я не смог найти условия активной даты в зависимости от текущего дня, хотя Rules хорошая тема.
Как вариант (требует знания php) - добавить в вашем вьюсе поле "Глобальный пользовательский текст". В этом поле из шаблонов подставьте свои даты и прочую инфу, которая определяет "да" или "нет". Затем темизировать это поле. В файле распарсить переменную $output на необходимые значение и из них составить нужное условие. И собственно сделать вывод ваших "да" или "нет"
Да, тоже подумал об этом, но к сожалению не знаю php. Мне нужен именно запрос, что "сегодняшняя дата попадает в диапазон поля node_data", добавленное пользователем. А то, что я могу выдернуть в "глобальный пользовательский текст" - это то, что вообще есть запись в календаре или нет, но это мне не поможет, т.к. она не обязательно будет приходится на сегодняшнюю дату.
Т.е. упрощая задачу - могу сказать, как мне сравнить сегодняшнюю дату с датой в ноде? И если попадает - вывести "да" если нет, то ничего не выводить.
А может быть как-то можно импортировать другой запрос views в поле "глобальный пользовательский текст"?
А что мешает в "глобальный пользовательский текст" добавить поле node_data ?
Я добавлю, но поле выведет диапазон дат, которые добавил пользователь, без сравнения с текущей датой. А если я настрою контекстные фильтры на сравнение с текущей датой, то не выведутся все материалы, которые не попадают в этот диапазон, а не только поле даты.
Для понимания вот ссылка на ноду, в которой настроены даты: http://dartlebedev.ru/auto/model19
про контекстные фильтры ниче толком не знаю, мало с ними общался. Могу лишь свой (php-шный) вариант попытаться довести до конца. У вас как именно выводится поле node_data, если вы его выведите в "глобальном пользовательском тексте"?
[field_auto_calendar]
нет, сами даты уже на странице на сайте.
Даты на странице выводятся с помощью модуля Calendar для Views, в блоке, с контекстным фильтром, который выдергивает ID ноды из url. Вводится пользователем с помощью модуля Date.
вот ты добавил в Глобальный пользовательский текст [field_auto_calendar], сохранил вьювс. Перешел на страницу сайта и что видишь? как отображается твой диапазон? Типа так: 2014-02-09 to 2014-03-15? Или как-то еще?
Да, все верно! Если поле не заполнено, то ничего не выводится. Если больше 1 значения диапазона, то через "," все значения от и до.
Можешь скопировать сюда вариант вывода значений, когда заполнены поля и от и до.
Мне нужна точная строка с датами. вот как она у тебя есть на сайте.
«Календарь:
понедельник, 2 февраля, 2015 to воскресенье, 8 февраля, 2015, пятница, 27 февраля, 2015 to суббота, 28 февраля, 2015»
Для страницы: http://dartlebedev.ru/auto/model19
если я правильно понял, то для каждый ноды может быть только один диапазон дат. Или нет? Здесь у тебя два диапазона...
Для каждой ноды может быть неограниченный диапазон дат. Вывод дат календаря можно и настроить в виде "02.02.2015 to 08.02.2015,..." Могу, конечно и ограничить, но я не понимаю, что ты хочешь предложить? Распарсить даты? Просто это будет очень сложным костылем, я думал есть какое-то решение проще, к примеру настроить контекстный фильтр для определенного поля views, а не для всей выборки.
Да, темизировать поле "Глобальный пользовательский текст" (http://php-include.ru/stati/temizatsiya-shablona-views), заменив в нем вывод диапазона дат на вывод "попадает", если текущая дата входит в диапазон или "не попадает", если не входит. То, как ты хотел. Это не костыль, а обычная практика в друпале. И это было бы просто (php код - пара строчек), если бы диапазон был один. Но если таких диапазонов в одной ноде куча, тогда, боюсь, это не вариант.
Контекстный фильтр - это фильтр. То есть он отсекает часть твоих нод. фильтрует. Ты же хочешь выводить все (то есть без фильтра), но чтобы было указание: попадает или нет.
Да, я думал что может можно настроить контекстный фильтр только по полю. Попробую разобраться, спасибо за ссылку. Но, в принципе, можно ограничить и одной записью! Если это сделать, то как будет выглядеть код?
В общем, спасибо за помощь! Буду пытаться разбираться…
При условии, что поле "глобальный пользовательский текст" будет выводить строго следующий формат дат:
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 'попадает'; ?>этот код не учитывает, что может быть введена только одна дата...нужно доп условия делать. Но если ты пойдешь именно по этому пути - допишем.
Отлично! Но запросто может быть так, что будет вбито только одно значение, тут уж я не могу ограничить…