MACROS

These are some default macros which are used by various templates in the system.

This creates an <A HREF="... to a command in the Apache::MVC system by catenating the base URL, table, command, and any arguments.

#%] [% MACRO link(table, command, additional, label) BLOCK; SET lnk = base _ "/" _ table _ "/" _ command _ "/" _ additional; lnk = lnk | uri | html; '<a href="' _ lnk _ '">'; label; "</a>"; END; %]

[%#

maybe_link_view takes something returned from the database - either some ordinary data, or an object in a related class expanded by a has-a relationship. If it is an object, it constructs a link to the view command for that object. Otherwise, it just displays the data.

#%]

[% MACRO maybe_link_view(object) BLOCK; IF object.table; # It's an object, i.e. a has-a link(object.table, "view", object.id, object); ELSE; object; END; END; %]

[%#

display_line

display_line is used in the list template to display a row from the database, by iterating over the columns and displaying the data for each column. It misses out the id column by default, and magically URLifies columns called url. This may be considered too much magic for some.

#%] [% MACRO display_line(item) BLOCK; FOR col = classmetadata.list_columns; NEXT IF col == "id"; "<td>"; IF col == "url" AND item.url; '<a href="'; item.url; '"> '; item.url; '</a>'; ELSIF col == item.stringify_column; maybe_link_view(item); ELSE; maybe_link_view(item.$col); END; "</td>"; END; '<td class="actions">'; button(item, "edit"); button(item, "delete"); "</td>"; END %] [%#

button

This is a generic button, which performs an action on an object.

This takes an object, and looks up the related_accessors; this should give a list of accessors that can be called to get a list of related objects. It then displays a title for that accessor, (i.e. "Beers" for a brewery) calls the accesor, and displays a list of the results.