SYNOPSIS<cal [options] [$dates [$events [$var ...]]][ /]> [</cal>]
DESCRIPTION
The cal
function prints one or more calendars. It takes an
optional list of $dates
which are significant dates to note on
the calendar. (If no $dates
are given, the calendar defaults
to the current month.) The $dates
may be Texis-parseable
dates, counter values, or a vCalendar
/English calendar rule
(see the SCHEDULE
tag for syntax, here).
The range of dates also determines the month(s) that the calendar
spans, unless otherwise specified (see options). A parallel argument
$events
is an optional list of short text names for these
dates, to be printed in the appropriate day. Further parallel
variables can be given ($var
etc.), which will be looped over
in the same fashion as $dates
and $events
. These can be
used for ancillary data associated with each event.
Each day number will be linked to a function (see the DAYFUNC
option), as well as each event (see EVENTFUNC
). Each day link
will have a variable ($date
) set to that day's date. Each
event link will have the appropriate $dates
, $events
etc. variables' value looped over. Thus, if the programmer
EXPORT
s the desired variables to URL
, then these links
can be used to provide a detailed view of a particular day or event
that the user clicks on.
In version 8 syntax - i.e. when the syntaxversion
pragma
(here) is 8 or more, the default in
version 8 - cal
is non-looping if self-closed, looping
otherwise (requiring a close tag), like other loopable statements. In
version 7 and earlier syntax, the statement is non-looping if
self-closed or there is no matching close tag; looping otherwise.
When looping, only the header, footer and row ends
(<tr>/</tr>) are printed for the calendar, and the
programmer is responsible for printing each day of the calendar inside
the loop (i.e. <td>, text and </td>). This allows more
flexibility as to how each day is displayed. Every day of every month
of the calendar is iterated over. Inside each iteration, 0 or more of
the appropriate values for this day of the $dates,
$events, etc. variables are available. (It is important to
note that inside the <cal>
loop, these variables are not
in a loop context yet, because more than one event, or zero events,
may occur on a given day. The programmer should <loop>
over
these variables inside the <cal>
loop.) The special variables
$loop
and $next
are set and incremented each
<cal>
iteration, starting with 0 and 1 respectively. The
variable $date is also set to the date of the current day.
Options that can be specified include:
TYPE=type
Sets the type of calendar to print. The possible values are
week
, month
, quarter
, and year
. A
month
calendar displays one or more contiguous months. A
quarter
calendar displays one or more contiguous quarters,
each three months across and starting with January, April, July or
October as appropriate. A year
calendar displays one or
more contiguous years, starting with January. A week
calendar displays a range of days like the month
type, but
later months are contiguously printed in the same box without
starting a new box. The default type is the smallest of
month
, quarter
or year
that is needed to
display the entire range of $dates
(if possible). (Note:
Prior to version 6.00.1298435000 20110222, the month
,
quarter
and year
types only ever displayed one
month, quarter or year, regardless of events or start/end range.)
DATEVAR=date
Sets the name of the variable to set at each iteration to the
current day's date. The default is "date
", e.g. the
variable $date
is set each iteration. If the programmer
EXPORT
s this variable to the URL
, it will be
available to each link the user clicks on.
DAYFUNC=/day.html
Sets the function/mime extension to append to the link for each
day number in the calendar. The default is "/day.html
",
i.e. the function day
will be called when a day number is
clicked on. Note that this option is irrelevant in the looping
syntax, since it is up to the programmer to explicitly generate
all text for a day, including links.
EVENTFUNC=/event.html
Sets the function/mime extension to append to the link for each
event in the calendar. The default is "/event.html
".
This option is irrelevant in the looping syntax, since the
programmer must generate all links.
MAXEVENTS=5
The maximum number of events to display in a day. The default is
5; if many events fall on one day there may not be enough room to
show them all, and too many may distort the calendar. This option
is irrelevant to the looping syntax: it is up to the programmer to
set a MAX
on the LOOP
over $events
.
BORDER=1
The value for the border
of the <table>
tag for the
calendar. The default is 1
; giving an empty string
generates no border
attribute.
WIDTH="100%"
The value for the width
of the <table>
tag for the
calendar. The default is "100%
"; giving an empty string
generates no width
attribute.
HEIGHT="50%"
The value for the height
of the <table>
tag for the
calendar. The default is "50%
" (except for the
WEEK
type where it is based on the number of weeks
printed); giving an empty string generates no height
style.
CELLPADDING=1
The value for the cellpadding
of the <table>
tag for
the calendar. The default is 1
; giving an empty
string generates no cellpadding
attribute.
CELLSPACING=0
The value for the cellspacing
of the <table>
tag for
the calendar. The default is 0
; giving an empty
string generates no cellspacing
attribute.
WEEKLEN=1
The maximum length of the weekday-name strings to print. The
default is the entire length for week
and month
types, and 1 for the quarter
and year
types.
MONTHFMT="%B %Y"
The date format to print the month header with. The default is
"%B %Y
". (Note: Prior to version 6.00.1298435000
20110222, the YEAR
type default was "%B
".)
DAYFMT="%e"
The date format to use for each non-event day number. The default
is "%e
" for Unix, and "%#d
" for Windows..
NEWDAYFMT="%b %e"
The date format to use for each day number that begins a new
month, in the week
type. The default is "%b %e
"
for Unix, and "%b %#d
" for Windows.
EVENTFMT="<b>%e</b>"
The date format to use for each day number that has events. The
default is "<b>%e</b>
" for Unix, and "<b>%#d</b>
"
for Windows.
MONTHCLASS=class
The style class
attribute for the <td>
for the month
header. The default is to center it with a larger font.
WEEKCLASS=class
The style class
attribute for each <td>
for the
weekday names. The default is MONTHCLASS
if given,
otherwise they are printed with <th>
cells.
DAYCLASS=class
The style class
attribute for each <td>
for non-event
days. The default is none.
EVENTCLASS=class
The style class
attribute for each <td>
for event
days. The default is DAYCLASS
if given, otherwise none.
START=date
The starting date for the calendar. The default is the start of
the week, month, quarter or year (depending on TYPE
) of the
earliest value of $dates
. For the week
type, day
resolution is possible; all other types always start on an
integral month, quarter or year. (Note: Prior to version
6.00.1298435000 20110222, the month
, quarter
and
year
types only ever displayed one month, quarter or year,
regardless of events or start/end range.)
END=date
The ending date for the calendar. The default is the end of the
week, month, quarter or year (depending on TYPE
) of the
latest $dates
value. For the week
type, day
resolution is possible; all other types always end on an integral
month, quarter or year. (Note: Prior to version 6.00.1298435000
20110222, the month
, quarter
and year
types
only ever displayed one month, quarter or year, regardless of
events or start/end range.)
NOHREF
If given, this flag turns off the day and event links. This can be used to save output space if the links are not to be used. It is irrelevant in the looping syntax since there the programmer is responsible for links.
DIAGNOSTICScal
has no effect on $ret
, though $loop
, $next
,
$url
and $urlq
are set.
EXAMPLE
This example prints a one-month calendar for December with some
events noted:
<$dates = "Dec 25" "Dec 31" "Dec 7">
<$events = "Christmas" "New Year's Eve" "Pearl Harbor Day">
<cal $dates $events>
This example uses the looping syntax to print a similar calendar as above, except that days with events have a gray background, and only events are linked:
<$dates = "Dec 25" "Dec 31" "Dec 7">
<$events = "Christmas" "New Year's Eve" "Pearl Harbor Day">
<cal $dates $events>
<IF $dates neq "">
<td align="left" valign="top"
style="height: 15%; width=14%; background-color: gray">
<ELSE>
<td align="left" valign="top"
style="height: 15%; width=14%">
</IF>
<strfmt "%at" "%d" $date><sandr ">>=0=" "" $ret>$ret<br/>
<LOOP $dates $events>
<a href="$url/event.html">$events</a>
</LOOP>
</td>
</cal>
CAVEATS
The cal
function was added in version 3.01.970250000 20000929.
Prior to version 6.00.1298435000 20110222, the $url
variable
must be explicitly used in the script for links to work properly.
The DATEVAR
-named variable ($date
by default) must
be explicitly used in the script for it to be exported properly.
The syntaxversion
pragma (here)
affects this statement: in version 8 and later syntax, the statement
must be self-closed (non-looping) or have a matching close tag
(looping).
In version 8.00.1645136290 20220217 and later, the self-closing syntax also sets $loop and $next.
SEE ALSOcalrule