The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
<%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 &>