MACROS
These are some default macros which are used by various templates in the system.
link
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
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.
view_related
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.