[%# =head1 MACROS These are some default macros which are used by various templates in the system. =head2 link This creates an '; label; ""; END; %] [%# =head2 maybe_link_view C 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; %] [%# =head2 display_line C 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 C column by default, and magically URLifies columns called C. This may be considered too much magic for some. #%] [% MACRO display_line(item) BLOCK; FOR col = classmetadata.list_columns; NEXT IF col == "id"; ""; IF col == "url" AND item.url; ' '; item.url; ''; ELSIF col == item.stringify_column; maybe_link_view(item); ELSE; maybe_link_view(item.$col); END; ""; END; ''; button(item, "edit"); button(item, "delete"); ""; END %] [%# =head2 button This is a generic button, which performs an action on an object. =cut #%] [% MACRO button(obj, action) BLOCK; %] [% action %] [% END %] [%# =head2 view_related This takes an object, and looks up the C; 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. =cut #%] [% MACRO view_related(object) BLOCK; FOR accessor = classmetadata.related_accessors.list; "
"; accessor | ucfirst; "
\n"; "
    "; FOR thing = object.$accessor; "
  • "; maybe_link_view(thing); "
  • \n"; END; "
"; END; END; MACRO test_xxxx(myblock) BLOCK; FOR col = classmetadata.columns; NEXT IF col == "id"; myblock; END; END; %]