[%# =head1 MACROS These are some default macros which are used by various templates in the system. =head2 link This creates an 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; ''; label | html; ""; 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.isa('Maypole::Model::Base'); link(object.table, "view", object.id.join('/'), object); ELSE; object | html ; 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" OR col == classmetadata.table _ "_id"; col_obj = item.find_column(col); ""; IF col == "url" AND item.url; ' '; item.url; ''; ELSIF col == classmetadata.stringify_column; maybe_link_view(item); ELSIF col_obj; # its a real column accessor = item.accessor_name_for(col_obj) || item.accessor_name(col_obj); # deprecated in cdbi maybe_link_view(item.$accessor); ELSE; 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; %] [% IF obj.is_public(action) %]
[% END %] [% 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; %] [%# =head2 view_item This takes an object and and displays its properties in a table. =cut #%] [% MACRO view_item(item) BLOCK; %] [% SET string = classmetadata.stringify_column %]
[% item.$string | html %]
[% INCLUDE navbar %] [% FOR col = classmetadata.columns.list; NEXT IF col == "id" OR col == string OR col == classmetadata.table _ "_id";; NEXT UNLESS item.$col; %] [%# =for doc It gets the displayable form of a column's name from the hash returned from the C method: #%] [% END; %]
[% classmetadata.colnames.$string %] [% item.$string | html %]
[% classmetadata.colnames.$col || col | ucfirst | replace('_',' '); %] [% IF col == "url" && item.url; # Possibly too much magic. ' '; item.url; ''; ELSIF item.$col.size > 1; # has_many column FOR thing IN item.$col; maybe_link_view(thing);", "; END; ELSE; maybe_link_view(item.$col); END; %] [%# This tests whether or not the returned value is an object, and if so, creates a link to a page viewing that object; if not, it just displays the text as normal. The object is linked using its stringified name; by default this calls the C method, or returns the object's ID if there is no C method or other stringification method defined. =cut #%]
[% END %]