Вывести ноды по календарю (связать datapicker и views)

Аватар пользователя lexa174 lexa174 2 июня 2016 в 22:52

Приветствую всех!

Никак не могу сообразить как сделать задачку, прошу помощи...

Представим себе что есть столовая, в ней меню на каждый день. Опустим вопросы создания нового типа ноды и прочее, тут-то вопросов нет.
Требуется красивый вывод всего этого на страницу по дням. То есть сверху должен быть календарь, а снизу меню на этот день. Понятно, что это проще всего сделать через вьюз, но если мы там вводим критерий фильтрации, то надо выбрать дату, потом нажать "применить", это, без сомнения, решение корявое. Надо более хитрое решение.

Как я вижу это в идеале. Развернутый календарь, в который надо ткнуть. Изначально выводится нода под текущей датой.

Но как это организовать - я уже голову сломал. Я такое видел, но не на друпале, вот картинка

1

Пробовал воткнуть модуль "календарь", но что-то он не слишком удобен мне показался по навигации, всё же не под это он заточен...

0 Thanks

Комментарии

Аватар пользователя 555666777 555666777 3 июня 2016 в 9:50
1

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

Аватар пользователя lexa174 lexa174 3 июня 2016 в 10:11

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

Аватар пользователя 555666777 555666777 3 июня 2016 в 10:23

Ajax настраивается в views. Там же и кнопка подтверждения скрывается и автоматическая отправка включается.
Датапикер всего лишь будет изменять значение поля, на это событие и будет реагировать фильтр views.

Аватар пользователя lexa174 lexa174 3 июня 2016 в 11:03

Огромное спасибо, пошел думать-экспериментировать

Так, вроде пикер заработал без подтверждения. Осталось придумать как подсунуть в фильтр по дефолту текущую дату и присобачить две кнопочки вперед-назад по дням

Аватар пользователя lexa174 lexa174 3 июня 2016 в 13:02

Да как-то не срастается с ним... Излишний функционал мешает, а вывод результатов совершенно не тот, не говоря уже про управление

Аватар пользователя lexa174 lexa174 3 июня 2016 в 13:39

Вот что у меня сейчас получилось при установке датапикера с друпалорг. Никак не могу понять как наладить связь между блоком пикера и вьюшкой.
Правда тут нет возможности отключить кнопку "поиск".
Тоже тупик...
1

Аватар пользователя 555666777 555666777 3 июня 2016 в 14:00

Меню на каждый день в отдельной ноде создается?
Как дата меню вводится / хранится?

Аватар пользователя lexa174 lexa174 3 июня 2016 в 14:09

Через Better Exposed Filters и jQuery UI Datapicker удалось вывести более-менее как надо.
Теперь осталось две проблемы
1. датапикер скрыт изначально, а должен быть в боевом положении сразу
2. Выводится изначально без фильтра, то есть все ноды, а надо по текущей дате.

Ну и придумать как сделать перемещение между днями двумя кнопками "вперед-назад"

Ошибки еще какие-то полезли...

2

Аватар пользователя 555666777 555666777 3 июня 2016 в 14:25

Так в инлайн его переведите:
Theming
The datepicker widget uses the jQuery UI CSS framework to style its look and feel. If datepicker specific styling is needed, the following CSS class names can be used:
ui-datepicker: The outer container of the datepicker. If the datepicker is inline, this element will additionally have a ui-datepicker-inline class.

И значение фильтра по умолчанию на сегодня поставьте

Аватар пользователя lexa174 lexa174 3 июня 2016 в 14:35

Хм... еще бы понять как это "перевести в инлайн"...

А как тут фильтр по умолчанию поставить? В критериях фильтрации такого нет. В пункте
настройки раскрытой формы разве что?

Аватар пользователя 555666777 555666777 3 июня 2016 в 14:39

Хранили бы вы дату в текстовом поле в формате YYYYMMDD и были бы счастливы.
сортировка по дате работала бы, само поле скрыли css, формат ввода в датапикере настроили и т.д.
установку на Сегодня через javascript/ две строчки

Аватар пользователя lexa174 lexa174 3 июня 2016 в 14:43

Ну тогда вводить ее неудобно будет ответственному за это лицу...
Так-то перебить еще не поздно, просто я не понимаю как тогда работать с этим полем

Скрывать-то даже смысла что-то нет, выводится-то полями, а сами ноды я закрою от индексации вне вьюшки.

Аватар пользователя lexa174 lexa174 3 июня 2016 в 14:46

Получается что встроенный датапикер по-простому не хочет выходить в развернутом виде, а отдельный модуль я не знаю как связать с вьюшкой...

Аватар пользователя lexa174 lexa174 3 июня 2016 в 20:01

О! Это было бы супер...

Но хотя бы умудриться связать модуль datepicker и вьюшку
Или сделать так, чтоб изначально был открыт штатный от jquery

Ну и никак не получается прописать открытие вьюшки с дефолтным значением по текущей дате.

Аватар пользователя dgastudio dgastudio 3 июня 2016 в 21:08
555666777 wrote:

Вы хотите вот такой ввод.

Без написания своего модуля тут никак...

писал в свое время вот такую штуку для одного коммерческого проекта, http://c2n.me/3yP0k1i.png. drupal + ajax
~ 100 строк кода. ничего особо сложного

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

Аватар пользователя lexa174 lexa174 3 июня 2016 в 21:13

Да тут больше двух недель вперед и не требуется
Но думал обойтись стандартными средствами.

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

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

Ну и последняя задача по идее должна часто встречаться. Неужели мне одному надо вывести вьюшку с дефолтным значением аргумента?

Аватар пользователя 555666777 555666777 3 июня 2016 в 21:59
<?php/**
 * Implements hook_views_pre_build().
 */
function YOUR_MODULE_views_pre_build(&$view) {
  if (
$view->name == 'cook_menu') {
    
$view->filter['field_date']->value date();
  }
}
?>
Аватар пользователя lexa174 lexa174 3 июня 2016 в 22:12

Ага... уже горячо

Куда это воткнуть? Попробовал в page.tpl.php и в template.php - сайт отваливается с ошибкой 500-й

Аватар пользователя 555666777 555666777 3 июня 2016 в 22:27

Это в свой модуль)))
На самом деле свой модуль создать очень легко.
А делать сайт не умея этого очень сложно!

Аватар пользователя lexa174 lexa174 3 июня 2016 в 22:41

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

Как бы отследить его работу или бездействие

Аватар пользователя 555666777 555666777 3 июня 2016 в 22:53

Как бы сделал я:
включил бы поле с датой в URL ноды меню. // /menu/2016-06-03
в своем модуле создал блок, который выводит вот такое:
123
и вывел блок только на страницах материала - меню.
Дата - ссылка на ноду очень легко в данном случае формируется, главное проверять существование пути.

Аватар пользователя lexa174 lexa174 3 июня 2016 в 23:03

Спасибо, почитаю

Пока времянкой вроде сделал, потом буду допиливать

Правда так и вылазит предупреждение
Notice: Undefined index: date в функции date_text_element_process() (строка 322 в файле /home/srv44133/htdocs/hf-f2/modules/date/date_api/date_api_elements.inc).

Где-то похоже идет несовпадение форматов

Аватар пользователя lexa174 lexa174 3 июня 2016 в 23:27

Хм... интересная задумка
Время можно скрыть, оставить только наполнение, сразу на три дня вывести

Стоит попробовать

Аватар пользователя lexa174 lexa174 3 июня 2016 в 23:34

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

Аватар пользователя lexa174 lexa174 5 июня 2016 в 10:38

Попытался через цсс прописать скрытым поле выбора даты, а jquery пикер сразу раскрытым, пока не получается