[Решено] Views выборка по CCK Date без учета года. Ежегодные события.

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

Аватар пользователя shock shock 21 апреля 2010 в 4:08

Очередная проблема. Помогите плиз.

В определенном типе контента есть CCK поле типа Date.
Во-первых, хотелось бы сохранять в это поле дату без учета года. Ну это, я так понимаю можно организовать просто указав формат даты "d.m" .
Во-вторых, нужно создать выборку views calendar где на текущий день отображались бы все события этого дня, но без привязки к текущему году. При клике по месяцу - выборка всех событий, например в марте.

Объясню для чего это нужно, чтобы было понятнее что нужно. Это календарь праздников. Каждый год одни и те же праздники, так что хотелось бы чтобы они повторялись ежегодно.

Спасибо заранее !

Комментарии

Аватар пользователя Nikit Nikit 21 апреля 2010 в 5:00

незнаю какие праздники, но вот обычные "Праздники" должны сохранятся в несколько полей (d.m, дата начала/конца, количественный, дни пропуска, продолжительность и т.д.), php-обработчик аргумента даты в Views нужно писать, ибо вот вам нюансы:
1. Иногда праздники начинаются с какого-то или кончаются каким-то числом. Клиент откроет 1980-й год и офигеет от "дня России или единства" Smile
2. Есть праздники, как пасха (лунно-солнечный), есть считающиеся по дням месяца, года (день программиста), они не будут поддаватсья вашей d.m
3. ну и т.д.

яб не заморачивался, а доставал праздники с уже работающих сайтов Smile

Аватар пользователя Oleksa@drupal.org Oleksa@drupal.org 21 апреля 2010 в 9:38

"shock" wrote:
Во-первых, хотелось бы сохранять в это поле дату без учета года. Ну это, я так понимаю можно организовать просто указав формат даты "d.m" .

Нет так сделать нельзя. Год все равно сохранится. Используя d.m. можно, только убрать его из отображения на ноде.

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

Аватар пользователя shock shock 22 апреля 2010 в 20:22

В принципе вы все правильно говорите - есть плавающие праздники, но в данном конкретном случае нужны только фиксированные даты не привязанные к году.

"<a href="mailto:Oleksa@drupal.org">Oleksa@drupal.org</a>" wrote:
Нет так сделать нельзя. Год все равно сохранится.

Да, это я в курсе - если не ошибаюсь, то везде будет 79-й год. Но ведь если год везде будет 79-й, то это все равно, что год не учитывается.

А вот так я, наверное, и сделаю:

"<a href="mailto:Oleksa@drupal.org">Oleksa@drupal.org</a>" wrote:
сделать два текстовых поля один для дня , другой для месяца

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

Аватар пользователя shock shock 23 апреля 2010 в 2:40

Так, создал два поля, datepick'еры прикрутил, осталось только views'ы создать. Вроде не должно быть трудно Smile

Аватар пользователя shock shock 23 апреля 2010 в 4:44

Так, ну вроде получилось:

  • Сделал два числовых поля с помощью CCK - одно для месяца, а второе для дня
  • Как прилепил к ним datepicker объяснить трудно, но если кому нужно будет, то объясню. Скажу только что при получении фокуса одним из этих полей появляется календарик и при выборе даты заполняются оба поля - одно номером месяца, а второе номером дня.
  • создал вью с двумя аргументами - месяц и день
  • ну и переопределил вывод ноды внутри календаря, чтобы выводилось немного по-другому
Аватар пользователя shock shock 23 апреля 2010 в 4:53

Теперь очередной вопрос ! Даже два вопроса !

1) Вывожу-то я с помощью views два числовых поля day и month в формате "dd / mm" , а вот как мне в том же вью вывести название месяца ??? Можно ли где-то переопределить вывод поля месяца, чтобы он выводился через функцию php, типа вот такого чтоли: date('F', mktime(0,0,0,1,arg(1),0))... или КАК и ГДЕ это можно сделать ???

2) Можно ли все это и самое главное КАК (?) привязать к стилю отображения calendar ?? Просто очень хотелось бы на календарике в сайдбаре отмечать праздничные дни.

Аватар пользователя Nikit Nikit 23 апреля 2010 в 5:55

без php-кода не обойдешься:
1. в header Views считай arg(позиция_месяца_в_url) и печатай по date.
2. темизируй ячейки календаря (кликни на Information, увидишь файлы тематизации), запрашивай есть сегодня праздник или печатай...

Аватар пользователя PVasili PVasili 10 мая 2010 в 0:05

Создайте вычисляемое поле. В нем пред-обсчитывайте то, что не регулярно происходит(как месяцдень), а что регулярно вычисляйте как месяцдень от поля date.

Аватар пользователя shock shock 19 мая 2010 в 4:21

PVasili wrote:
Создайте вычисляемое поле. В нем пред-обсчитывайте то, что не регулярно происходит(как месяцдень), а что регулярно вычисляйте как месяцдень от поля date.

Ммм... что-то я не пойму, как вычисляемые поля CCK помогут мне с выборками Views ? В принципе с самой выборкой может и поможет, но результат, на сколько я понимаю будет тот же, что и при предыдущей реализации с помощью двух отдельных текстовых полей. А вот вопрос с отмечанием этих дней в календаре по-моему никак не решается. Если я не прав - поправте Smile

Аватар пользователя shock shock 17 мая 2010 в 23:43

В принципе уже реализовал так как выше описал - с помощью двух числовых полей - месяц и год. К ним прикрутил popup календарик. Но все же не получилось прикрутить календарь в сайдбаре с отмеченными на нем событиями, так что стоит попробовать с помощью вычисляемых полей... В принципе я с вычисляемыми полями пока не работал, так что любые подсказки и советы приветствуются ! Спасибо !

Аватар пользователя PVasili PVasili 9 сентября 2010 в 20:46

"infarh" wrote:
аналогичная проблема, может кто подскажет верные пути решения?
народ, ну вы и ленивые... Smile

<?php
if (!$node->nidnode_save($node);
$out 10000 date('d'strtotime($node->field_date_live[0]['value'])) * 100 date('m'strtotime($node->field_date_live[0]['value']));
$node_field[0]['value'] = $out;
?>
Аватар пользователя ibest ibest 22 октября 2010 в 15:40

у меня немного другая проблема
есть выборка по году и месяцу
но почему то фильтр по дате работает только как "И", а "ИЛИ" не работает (точнее работает также как "И")
вообщем надо както реализовать выборку с логикой "И-ИЛИ", чтобы:
- при выборе года показывались все документы соответствующие этому году
- при выборе месяца показывались все документы соответствующие этому месяцу
- при выборе года и месяца показывались все документы соответствующие месяцу этого года

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