]> git.decadent.org.uk Git - maypole.git/blob - templates/factory/macros
Remove "name" magic, replace with "stringify_column" magic.
[maypole.git] / templates / factory / macros
1 [%#
2
3 =head1 MACROS
4
5 These are some default macros which are used by various templates in the
6 system.
7
8 =head2 link
9
10 This creates an <A HREF="... to a command in the Apache::MVC system by
11 catenating the base URL, table, command, and any arguments.
12
13 #%]
14 [%
15 MACRO link(table, command, additional, label) BLOCK;
16     '<A HREF="' _ base _ table _ "/" _ command _ "/" _ additional _ '">';
17     label;
18     "</A>";
19 END;
20 %]
21
22 [%#
23
24 =head2 maybe_link_view
25
26 C<maybe_link_view> takes something returned from the database - either
27 some ordinary data, or an object in a related class expanded by a
28 has-a relationship. If it is an object, it constructs a link to the view
29 command for that object. Otherwise, it just displays the data.
30
31 #%]
32
33 [%
34
35 MACRO maybe_link_view(object) BLOCK;
36     IF object.moniker; # It's an object, i.e. a has-a
37         link(object.moniker, "view", object.id, object);
38     ELSE;
39         object;
40     END;
41 END;
42 %]
43
44 [%#
45
46 =head2 display_line
47
48 C<display_line> is used in the list template to display a row from the
49 database, by iterating over the columns and displaying the data for each
50 column. It misses out the C<id> column by default, and magically
51 URLifies columns called C<url>. This may be considered too much magic
52 for some.
53
54 #%]
55 [% MACRO display_line(item) BLOCK;
56      FOR col = classmetadata.columns;
57         NEXT IF col == "id";
58         "<td>";
59         IF col == "url";
60             "<A HREF="; item.url; "> "; item.url; "</A>";
61         ELSIF col == item.stringify_column;
62             maybe_link_view(item);
63         ELSE;
64             maybe_link_view(item.$col);
65         END;
66         "</td>";
67      END;
68     button(item, "edit");
69     button(item, "delete");
70 END %]
71 [%#
72
73 =head2 button
74
75 This is a generic button, which performs an action on an object.
76
77 =cut
78
79 #%]
80 [% MACRO button(obj, action) BLOCK; %]
81 <TD>
82 <FORM METHOD="post" ACTION="[%base%]/[%obj.moniker%]/[%action%]/[%obj.id%]">
83     <INPUT TYPE="submit" NAME="[%action%]" VALUE="[%action%]">
84 </FORM>
85 </TD>
86 [% END %]
87 [%#
88
89 =head2 view_related
90
91 This takes an object, and looks up the C<related_accessors>; this should
92 give a list of accessors that can be called to get a list of related
93 objects. It then displays a title for that accessor, (i.e. "Beers" for a
94 brewery) calls the accesor, and displays a list of the results. 
95
96 =cut
97
98 #%]
99 [% 
100 MACRO view_related(object) BLOCK;
101     FOR accessor = classmetadata.related_accessors.list;
102         "<H3>"; accessor | ucfirst; "</H3>\n";
103         "<UL id=\"vlist\">";
104         FOR thing = object.$accessor;
105             "<LI>"; maybe_link_view(thing); "</LI>\n";
106         END;
107         "</UL>";
108     END; 
109 END;
110
111 MACRO test_xxxx(myblock) BLOCK;
112     FOR col = classmetadata.columns;
113         NEXT IF col == "id";
114         myblock;
115     END;
116 END;
117 %]