<%args>
</%args>
<%doc>
=for doc
The C<view> template takes some objects (usually just one) from
C<objects> and displays the object's properties in a table.
=cut
</%doc>
<& header, %ARGS &>
%foreach my $item (@$objects) {
% my $string = $item->stringify_column;
<h2> <% $item->get($string) %></h2>
<& navbar, %ARGS &>
<table class="view">
<tr><td class="field"><% $classmetadata->{colnames}->{$string} %></td>
<td> <% $item->{$string} %> </td></tr>
%foreach my $col (@{$classmetadata->{columns}}) {
% next if $col eq "id" or $col eq $string;
% next unless $item->$col;
<%doc>
=for doc
It gets the displayable form of a column's name from the hash returned
from the C<column_names> method:
</%doc>
<tr>
<td class="field"> <% $classmetadata->{colnames}->{$col} %> </td>
<td>
%#=cut
% if ($col eq "url" && $item->url) { # Possibly too much magic.
<a href="<%$item->url%>"><%$item->url%></a>
% } else {
%#=for doc
%#One interesting macro used in this template is C<maybe_link_view>:
<& macros/maybe_link_view, %ARGS, item=>$item->$col &>
<%doc>
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<name> method, or returns the object's ID
if there is no C<name> method or other stringification method defined.
=cut
</%doc>
%}
</td>
</tr>
%}
</table>
<%doc>
=for doc
The C<view> template also displays a list of other objects related to the first
one via C<has_many> style relationships; this is done by calling the
C<related_accessors> method - see L<Model/related_accessors> - to return
a list of has-many accessors. Next it calls each of those accessors, and
displays the results in a table.
</%doc>
<& macros/view_related, %ARGS, object=>$item &>
%#=cut
<& macros/button, %ARGS, item=>$item, action=> "edit" &>
<& macros/button, %ARGS, item=>$item, action=> "delete" &>
%}
<& footer, %ARGS &>