П2: Календарь
П2: КалендарьМорда: СтандартнаяСераяЗеленая Главная / Портфель / П2: Календарь Запомнить № 4:
П2: КалендарьОпубликовано:
22 марта 2002 | Этот календарь (по месяцам) предназначен для выбора периода, за который выводятся какие-либо материалы, например новости, статьи или чего ещё в голову взбредет. Если за какой-либо день не было ничего, ссылка на этом дне не ставится, также календарь выделяет текущий день и месяц. Я подразумеваю хранение данных материалов в базе данных, что, на мой взгляд, более правильно, нежели чем хранение их в отдельных файлах.
Для всех макросов, создающих календарь я создал отдельный файл _calendar.cfg, который я подключаю на всех страницах, где он требуется. Текст данного файла приведен ниже:#######
@calendar[]
^if[^var[m] == 12;
^var[next_m;1]
^var[next_y;^var[y]]
^var[next_y;+;1]
;
^var[next_m;^var[m]]
^var[next_m;+;1]
^var[next_y;^var[y]]
]
^if[^var[m] == 1;
^var[prev_m;12]
^var[prev_y;^var[y]]
^var[prev_y;-;1]
;
^var[prev_m;^var[m]]
^var[prev_m;-;1]
^var[prev_y;^var[y]]
]
^context[month;
^calendar[month;^var[y];^var[m]]
<table cellpadding=4 cellspacing=3 width=100%>
^macro[calendar.month.year]
^macro[calendar.day.of.week]
^macro[calendar.days]
</table>
]
#######
@calendar.month.year[] //вывод года и месяца со ссылками на пред. и след. месяц
<tr>
<td bgcolor=#ffffff align=center width=16%>
# не выводим ссылки на периоды раннее 2002 года
^if[^var[prev_y] < 2002;
<^;<^;
;
<a href=./?y=^var[prev_y]&m=^var[prev_m] style="text-decoration: none^;">
<^;<^;
</a>
]
</td>
<td bgcolor=#ffffff align=center colspan=5 width=68%>
^if[^date[%m] == ^var[m] && ^date[%Y] == ^var[y];
^var[month_year;<strong>^var[month] ^var[y]</strong>];
^var[month_year;^var[month] ^var[y]]
]
^if[^number[d] !=0 && ^number[m] != 0 && ^number[y] != 0;
<a href="./?y=^var[y]&m=^var[m]">^level[none;^var[month_year]]</a>;
^level[none;^var[month_year]]
]
</td>
<td bgcolor=#ffffff align=center width=16%>
^if[^var[next_y] > ^date[%Y];
>^;>^;
;
^if[^var[y] == ^date[%Y] && ^var[next_m] > ^date[%m];
>^;>^;
;
<a href="./?y=^var[next_y]&m=^var[next_m]" style="text-decoration: none^;">
>^;>^;
</a>
]
]
</td>
</tr>
#######
@calendar.day.of.week[] //вывод названий дней недели
<tr>
^context[daysofweek;
^config[Пн\tВт\tСр\tЧт\tПт\tСб\tВс]
^for[j;0;6;
^eq[^item[^var[j]];Вс;
<td bgcolor=#eeeeee align=center width=16%>
<span style="color: #ff0000">^item[^var[j]]</span>
</td>
;
<td bgcolor=#eeeeee align=center width=16%>
^item[^var[j]]
</td>
]
]
]
</tr>
#######
@calendar.days[] //вывод дней календаря
^menu[
<tr>
^for[j;0;6;
^ifdef[^item[^var[j]];
^var[params;y=^var[y]&m=^var[m]&d=^item[^var[j]]]
^if[^date[%d] == ^item[^var[j]] && ^date[%m] == ^var[m] && ^date[%Y] == ^var[y];
^var[color;#ffcc00];
^var[color;#ffffff]
]
<td bgcolor=^var[color] align=center width=16%>^macro[calendar.day]</td>
;
<td bgcolor=#ffffff align=center width=16%> ^;</td>
]
]
</tr>
]
#######
@calendar.day[] //вывод дня календаря
^if[^item[^var[j]]==^number[d];
<strong>^item[^var[j]]</strong>;
^if[^date[%d]<=09;
^var[current_day;^right[^date[%d];1]];
^var[current_day;^date[%d]]
]
^if[^var[y] == ^date[%Y] && ^var[m] == ^date[%m] && ^item[^var[j]] > ^var[current_day];
^macro[calendar.day.no.link.future]
;
^ifdef[^optionset[^var[score];^item[^var[j]]];
^macro[calendar.day.link];
^macro[calendar.day.no.link]
]
]
]
#######
@calendar.day.no.link[] //показывать тек. день или день в прошл. без ссылки
^if[^var[j] == 6;
<span style="color: #ff0000">^item[^var[j]]</span>;
<span style="color: #000000">^item[^var[j]]</span>
]
#######
@calendar.day.no.link.future[] //показывать день в будущем без ссылки
^if[^var[j] == 6;
<span style="color: #ff0000">^item[^var[j]]</span>;
<span style="color: #666666">^item[^var[j]]</span>
]
#######
@calendar.day.link[] //показывать день со ссылкой
^if[^var[j] == 6;
<A HREF="./?^var[params]" style="color: #ff0000">^item[^var[j]]</A>;
<A HREF="./?^var[params]">^item[^var[j]]</A>
]
#######
@calendar.sql[] //форм. множ. дней когда были новости
^context[calendar.sql;
^sql[
SELECT distinct datepart(dd, Data)
FROM some_table
WHERE datepart(mm, Data) = ^var[m] and datepart(yy, Data) = ^var[y]
]
^menu[
^var[d;0]
^if[^item[0] <= 09;
^var[d;.;^item[0]];
^var[d;^item[0]]
]
^var[score;.;|^var[d]]
]
^var[score;^mid[^var[score];1;100]]
]
#######
@calendar.variables[] //формирование вспомогат. переменных
^ifdef[^form[y];
^var[d;^number[d]]
^var[m;^number[m]]
^var[y;^number[y]]
;
^if[^date[%d] <= 9;
^var[d;^right[^date[%d];1]];
^var[d;^date[%d]]
]
^if[^date[%m] <= 9;
^var[m;^right[^date[%m];1]];
^var[m;^date[%m]]
]
^var[y;^date[%Y]]
]
^context[months;
^load[named;months.cfg]
^locate[number;^var[m]]
^var[month;^item[title]]
] Краткие пояснения:Макрос calendar и есть макрос, выводящий календарь на страницу.Макрос calendar.sql — вспомогательный макрос делающий запрос к базе, где хранятся материалы, для того чтобы узнать, в какие дни они были, а в какие нет. Данный макрос вставляется в блок sql запросов на странице (т.е. в то место, где создается соединение с базой, и делаются все запросы). В данном макросе конструкции datepart(dd, Data), datepart(mm, Data) datepart(yy, Data) означают день, месяц и год соответственно от некоего поля Date типа datetime, которое определяет дату публикации. Этот синтаксис работает только для Microsoft SQL сервера, для других СУБД он несколько иной, например для mySQL эти функции выглядят DAYOFMONTH(Data), MONTH(Data) и YEAR(Data) соответственно.Макрос calendar.variables создает некоторые вспомогательные переменные и вызывается в макросе autoexec.Странице, на которой помещен данный календарь и которая занимается выводом материалов, значения года, месяца и дня передаются переменными y, m и d соответственно например: /news/?y=2002&m=03&d=22 и запрос к базе, выполняемый на странице выводит данные за указанный период.Файл _months.cfg подключаемый в макросе calendar.variables, имеет вид:
number title
1 Январь
2 Февраль
3 Март
4 Апрель
5 Май
6 Июнь
7 Июль
8 Август
9 Сентябрь
10 Октябрь
11 Ноябрь
12 Декабрь
<< № 3 | Содержание | № 5 >>Из последнего№ 24 Работаем с .htpasswd 08.11.2003 (Изменено: 10.01.2004)№ 23 Самодокументирование парсерного кода 14.09.2003№ 22 Работаем с RSS 21.02.2003№ 21 Топологическая сортировка 16.02.2003№ 20 Установка 3-го парсера на хостинге 350mb.ru 12.02.2003ПолезноеParser 2Parser2 - ПримерыДокументация на Parser 2Главная / Портфель / П2: Календарь Запомнить Информация о сервереАвторРегистрация/настройки
содержание | 2 | Изображения
Используются технологии
uCoz