| Новости | FAQ | Авторы | Документация | В действии | Библиотека |
| Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
egr 16.12.2002 15:31
В чистом виде, пожалуйста:#######
# Calendar class v3.2.1
# абстрактный класс для формирования XML кода календаря (метод ^xml[])
# Описание атрибутов:
# in - показывает что этот день является сегодняшним днём
# f - наличие материалов в этот день
# hit - этот день выбран пользователем -> на него не ставить ссылку и выбирать
# данные только за этот день
@CLASS
calendar
#######
@init[date;days_of_files]
# получение текущей даты
$date_now[^date::now[]]
# Инициал. хэш показывающий какой период времени передан
# при создании экземпляра класса
$self.date[$date]
# вызов метода для создания специфических для языка переменных
# в классе производном от этого и определить только один
# метод @i18n[]
^i18n[]
# определение переменных месяца и года для пред. месяца календаря
$calendar_month_prev[^date::create($date.year;$date.month)]
^calendar_month_prev.roll[month](-1)
$prev_m($calendar_month_prev.month)
$prev_y($calendar_month_prev.year)
# определение переменных месяца и года для след. месяца календаря
$calendar_month_next[^date::create($date.year;$date.month)]
^calendar_month_next.roll[month](+1)
$next_m($calendar_month_next.month)
$next_y($calendar_month_next.year)
# the hash of publications(files)
$self.days_of_files[$days_of_files]
#######
@xml[]
$result[
<month>
^month_year[]
^weekdays[]
^week[]
</month>
]
#######
# формирование тега для года и месяца
@month_year[][hit]
^if(
$date.day && $date.month && $date.year ||
(
$date_now.month == $date.month &&
$date_now.year == $date.year &&
$date.day
)
){
$hit[]
}{
$hit[hit="1"]
}
<month_year
month="$date.month"
month_title="$month"
next_month="$next_m"
prev_month="$prev_m"
year="$date.year"
next_year="$next_y"
prev_year="$prev_y"
$hit
/>
#######
# тег названий дней недели
@weekdays[]
<weekdays>
^for[i](0;6){
<day title="$calendar_locale.day_names.$i"/>
}
</weekdays>
#######
# формирование тегов для каждой недели месяца
# day - день месяца, может быть нулем, если начало/конец
# первой/последней недели месяца не приходятся на понедельник/воскресенье
@week[][day;in;f;hit;d_attr]
^calendar_month.menu{
<week>
^for[i](0;6){
$day($calendar_month.$i)
# формирование атрибута дня
^switch($day){
^case(0){
$d_attr[]
}
^case(1;2;3;4;5;6;7;8;9){
$d_attr[d="0${day}"]
}
^case[DEFAULT]{
$d_attr[d="$day"]
}
}
# формирование атрибута текущего дня
^if(
$date_now.day == $day &&
$date_now.month == $date.month &&
$date_now.year == $date.year
){
$in[in="1"]
}{
$in[]
}
# формирование атрибута нахождения в данном дне
^if($day == $date.day){
$hit[hit="1"]
}{
$hit[]
}
# формирование атрибута наличия материалов за день
^if($days_of_files.$day){
$f[f="1"]
}{
$f[]
}
<day $d_attr $in $f $hit/>
}
</week>
}производный класс: ####### # Вызывать так: формировать объект конструктором init # $object[^calendar_ru::init[$date;$days_of_files]] # далее получаем XML календаря ^object.xml[] @CLASS calendar_ru ####### @USE calendar.p ####### @BASE calendar ####### @init[date;days_of_files] ^calendar:init[$date;$days_of_files] ####### # Метод, в котором определяются специфические для разных языков # параметры календаря @i18n[][m;y] # the hash of local calendar (month and day names) $calendar_locale[ $.month_names[ $.1[Январь] $.2[Февраль] $.3[Март] $.4[Апрель] $.5[Май] $.6[Июнь] $.7[Июль] $.8[Август] $.9[Сентябрь] $.10[Октябрь] $.11[Ноябрь] $.12[Декабрь] ] $.day_names[ $.0[Пн] $.1[Вт] $.2[Ср] $.3[Чт] $.4[Пт] $.5[Сб] $.6[Вс] ] ] $m($date.month) $y($date.year) $month[$calendar_locale.month_names.$m] $calendar_month[^date:calendar[rus]($y;$m)]при работе возникает ошибка:
(void) not a method or junction, can not call it menu d:/apache/htdocs/classes/calendar.p(95)95-я строка (это первая строка метода @week[] базового класса) начинается с ^calendar_month.menu{